和 Kent C. Dodds 一起测试 Javascript

Testing Javascript with Kent C. Dodds

了解测试任何 JavaScript 应用程序的智能、高效方法。

—完美测试的基本指南—

为什么要费心测试你的 JavaScript?

当用户遇到错误时,他们看起来像这样:🤬

错误使工作陷入停顿。

错误会造成经济损失。

每次遇到Bug时,用户信任都会受到侵蚀。

Bug很糟糕。

谁会受到指责?

你。

开发者。

知道在部署代码之前应该消除错误。

知道您需要发布以下代码:

  • 抓住一切机会保证它有效。
  • 不会用不必要的错误惩罚用户。
  • 不玩打地鼠的功能,修复一件事只是为了打破另一件事。
  • 对您的同事来说是可维护和可理解的。

一个专业的船舶工作代码。有效的代码。

我们谈论的是经过良好测试的代码。只有通过测试,您才能自信地交付自信、专业的代码。

为什么不测试用户依赖的代码?

当你的用户代码失败时,你有没有完成你的工作?

您应该尽可能做好自己的工作并进行测试,对吗?

正确的。

只有一个问题…

“测试需要太多时间和精力。”

没有时间了。你已经很忙了。

没有明显的投资回报率。您无法获得测试工作的支持或预算。

没有办法测试一切。大多数测试是在您的应用程序的每一轮中单击单击。这需要很长时间,而且感觉像是在浪费时间——你想把时间花在发布新功能上,而不是 QAing 上。

没有人有时间这样做。但无论如何,您的应用程序被测试。如果不是你,那么你的用户。

交叉你的手指并推动刺激。

所以…点击点击点击希望最好的?这就是我们正在做的?

如果我们想发布高质量、经过良好测试的 JavaScript 应用程序,就必须有更好的方法。

想象一下将测试应用程序的繁重工作外包。

你是开发者。

你知道人类不擅长复杂、重复的任务。

您还知道计算机非常非常擅长复杂、重复的任务。

专业的开发人员使用计算机来自动化测试关键路径、行为和所有小事情——一遍又一遍,一天一夜。

这就是专业开发人员完成工作的方式……并且做得很好。

自动化测试是有利的举措

自动化测试是您的后盾,是您的力量。

自动化测试是你的秘密武器…

但在构建这些测试之前,您需要知道:

  • 我应该测试什么?
  • 我什么时候测试它?
  • 我需要 100% 的覆盖率吗?
  • 多少次测试就够了?

您可以在 Internet 上搜索以找到正确的测试工具和技术炼金术——或者您可以跳过分析瘫痪并使用经过验证的测试方法直接获得应用程序的成功。

一种经过验证的四层软件测试方法

测试奖杯是一种自下而上的测试 Web 应用程序的专业方法。这是关于编写足够的测试——正确的测试。这不是要达到 100% 的覆盖率。

通过使用这种经过验证的测试方法,您将对这些技术进行分层:

  • 使用静态类型系统和 linter来捕获基本错误,例如拼写错误和语法。
  • 针对应用程序的关键行为和功能编写有效的单元测试。
  • 开发集成测试以全面审核您的应用程序,并确保一切正常、和谐地协同工作。
  • 为关键路径的自动点击测试创建端到端 (e2e) 功能测试,而不是依赖用户为您完成。

这四层自动化测试为您提供了以信心、速度和节省资金的方式交付专业 JavaScript 应用程序的手册。每次。

一种测试每个 JavaScript 应用程序的专业方法

本课程将四层测试方法应用于 React 应用程序,但这种基本策略可以应用于任何 JavaScript 框架:Angular、Vue、旧版 Backbone 应用程序,甚至是我们尚未遇到的框架和库。

完成本课程后,您将具备:

  • 提供按预期为用户工作的可靠功能
  • 选择最适合工作的工具
  • 与您的同事更有效地沟通
  • 做一个更自信、更专业的 JavaScript 开发者

学习 JavaScript 测试的专业方法,并始终像您一样交付高质量的软件。

测试 JavaScript 有什么?

8个模块,充满了密集的测试知识

JavaScript 测试基础

你知道测试框架是做什么的吗?你知道是什么让测试框架与测试或断言库不同吗?有效使用工具的最佳方法是了解它的工作原理。了解工具如何工作的最佳方法是自己制作!

在这个简短的课程中,我们将通过构建我们自己的简单版本来了解测试框架和断言库是如何工作的。

JavaScript 模拟基础

运行单元测试时,您不希望实际发出网络请求或向真实信用卡收费。那可能……变得昂贵……而且非常非常缓慢。因此,您可以修改一些 JavaScript 模块和函数在测试期间的工作方式,以避免测试不可靠性(片状)并提高测试速度,而不是像在生产环境中那样运行代码。这种修改可以以存根、模拟的形式出现,或者通常是:“测试替身”。

有一些很棒的库和抽象可以在测试期间模拟你的 JavaScript 模块。Jest 测试框架为函数以及整个模块内置了强大的模拟功能。不过,要真正了解事情是如何工作的,让我们自己实现其中的一些功能。

静态分析测试 JavaScript 应用程序

您的应用程序可以通过多种方式破坏。最常见的错误来源之一与拼写错误和错误类型有关。将字符串传递给需要一个数字的函数,或者在逻辑语句中遇到常见的拼写错误,这些都是不应该犯的愚蠢错误,但这种情况一直在发生。

我们可以为我们的整个代码库编写一套全面的自动化测试,以使这样的某些错误永远不会发生,但这可能会工作量太大,并且会减慢开发速度,从而不值得。对我们来说幸运的是,我们可以使用 ESLint、TypeScript、Prettier 等工具来满足整个类别的测试,并提供出色的开发人员体验。

使用 DOM 测试库测试任何 JS 框架

使用您的应用程序组件的人不必知道或关心您用于编写应用程序的框架。你猜怎么着:你的测试也不应该。

本课程使用 11 种不同的框架探索dom-testing-library ,从ReactSvelte。您将获得为任何 JavaScript 框架编写测试的实践经验,让您有信心将 JavaScript 应用程序与您选择的框架一起发布。

配置 Jest 以测试 JavaScript 应用程序

Jest 是一个功能齐全的测试框架,具有首屈一指的开发者体验。它同时非常简单和灵活。对于简单的用例,您通常不需要配置任何东西,安装并享受内置的覆盖和观看模式支持。

但是,在实际应用程序中,您通常会有特定于您的应用程序的需求,尤其是在测试基于浏览器的应用程序时。您需要处理 Node.js 不支持的 Webpack 加载器、动态导入和自定义模块解析。

在本课程中,我们将介绍优化 Jest 配置以使测试真实世界的 JavaScript 应用程序成为一种乐趣的方法。除了 Babel 支持、代码覆盖率、如何使监视模式更有帮助以及如何运行具有完全不同配置的测试套件之外,我们还将介绍已经提到的内容。

使用 Jest 和 React 测试库测试 React 组件

如果您想满怀信心地交付您的应用程序(当然您确实这样做了),您需要一套出色的自动化测试来绝对确保当更改到达您的用户时,不会有任何问题。为了获得这种信心,您的测试需要真实地模仿用户实际使用您的 React 组件的方式。否则,当应用程序在现实世界中被破坏时,测试可能会通过。

在本课程中,我们将编写一系列渲染方法并运行一系列测试,看看我们如何在不放弃可维护性或测试运行速度的情况下获得所需的信心。

为 JavaScript Web 应用程序安装、配置和编写 Cypress 脚本

Cypress是一个非常强大的 Web 测试工具。它能够测试任何 Web 应用程序。它的架构使其优于类似的端到端测试工具。它的开发人员体验是一流的。由于赛普拉斯在与应用程序其他部分相同的环境中运行您的测试,因此您能够获得速度、可靠性和可调试性,而这只是使用类似工具的遥不可及的梦想。捕获?没有问题。赛普拉斯是例外。

在本课程中,我们将介绍如何安装、配置和编写 Cypress 脚本来测试现代的、真实的 JavaScript Web 应用程序。

测试 Node.js 后端

后端包含我们应用程序的大部分业务逻辑,这些业务逻辑通常用于支持多个客户端(Web、移动和其他本机平台)。此逻辑对于正确处理至关重要,并且对此进行重大更改可能会对您公司的目标造成毁灭性影响(更不用说底线了)。提高“部署信心”至关重要,而自动化测试是做到这一点的最佳方式。

随着 Node.js 在全球范围内的使用不断增长,学习如何以提高开发人员速度和信心的方式测试这个关键任务代码变得越来越重要。在本次研讨会中,我们使用 Express.js 示例并重点介绍您需要学习的模式和实践,以便您可以应用所学知识来测试在任何 Node.js Web 框架中编写的代码。

您将学习:

  • 测试纯函数
  • 测试中间件
  • 测试控制器
  • 测试 API 路由
  • 模拟第三方依赖
  • 测试经过验证的代码

从行业专家那里获得洞察力。

大家好,我是本课程的创建者 Kent C. Dodds。

我是一名全栈 JavaScript 工程师。在 PayPal,我帮助构建了向全球数百万用户发送的产品。我在 TC39 上代表 PayPal。我是一名谷歌开发专家,多年来我一直在教 Egghead.io 和 Frontend Masters。我婚姻幸福,是四个孩子(和一只狗)的父亲。我喜欢我的家人、代码、JavaScript、React,当然还有测试!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。