学习目标
完成本单元后,您将能够:
- 描述单元测试和端到端测试之间的目的和区别。
- 解释闪电Web组件的单元测试的作用。
先决条件
在本模块中,您将使用Visual Studio代码编辑器在Salesforce DX项目中开发Lightning Web组件和单元测试。如果您不熟悉Lightning Web组件,Salesforce DX或使用Visual Studio Code进行Salesforce开发,我们建议您完成 快速入门:Salesforce DX, 快速入门:Visual Studio Code for Salesforce开发和 快速入门:Lightning Web组件 在继续之前进行项目。
为什么测试很重要
“在设计阶段未检测到的任何错误将在编码阶段花费十倍的时间来进行检测,而在调试阶段将花费十倍的时间。”
博士 Nikolai Bezroukov,调试的艺术
调试和测试是相关的,但在软件开发中是不同的过程。测试尝试查找并报告错误。调试尝试找出这些错误的原因并进行修复。根据Nikolai Bezroukov博士的说法,在发现和压缩代码中的错误时,越早越好。
在理想的世界中,软件不会有任何错误。但是现实是,我们会犯错误,需求会被误解,应用程序会以无法预料的方式使用。测试有助于发现这些问题,以便可以解决它们。您发现错误的时间越早,它们就越“便宜”。一旦错误进入开发的下一阶段(或在最坏的情况下为生产),就会有更多的人员和流程参与其中,以进行识别和修复。
对于Salesforce应用程序通常执行两种类型的测试:单元测试和端到端测试。它们的区别在于范围和目的。
单元测试
单元测试的重点是测试应用程序中小的离散功能。为了促进单元测试,请使用可测试的小型单元来构建应用程序,而不是编写单个长的Apex方法或类。这意味着将代码模块化为可以独立测试的离散方法。同样,与其为应用程序编写单个庞大的Lightning组件,不如将功能模块化为较小的组件,这些组件可以独立进行测试。易于运行的简短,快速的单元测试鼓励开发人员在其开发和持续集成过程中编写和运行它们。这样可以确保尽快发现并修复错误。请务必查看 测试驱动开发(TDD), 以更深入地了解此过程。
端到端测试
端到端测试专注于测试整个应用程序或用户旅程。对于Web应用程序,这通常涉及在浏览器中进行测试,以验证页面上的代码和组件在测试环境(例如沙箱或草稿组织)中如何协同工作。
端到端测试往往比单元测试慢,因为它们在每个测试中覆盖了应用程序的更多功能。由于实时环境的随机不一致(例如网络延迟,缓存,对第三方系统的依赖性,基础结构问题等),端到端测试的可靠性也低于单元测试。这些不一致会导致测试一次通过,而下一次失败,这称为拍打测试。尽管存在这些缺点,但是与单元测试相比,端到端测试为应用程序及其集成点提供了有价值的,更实际的验证。
单元测试与端到端测试
让我们看一下单元测试和端到端测试在实践中如何工作。作为示例,我们将使用 lwc-recipes存储 库中 的api- 属性 Lightning Web组件,这 是Salesforce平台上Lightning Web Components的代码示例集合。
该<c-api-property>
组件由(1)<lightning-card>
,(2)<lightning-input>
和(3)<c-chart-bar>
组件组成。
- 该
<lightning-card>
组件显示ApiProperty标题,并包含其他两个组件。 - 该
<lightning-input>
组件处理用户的数字输入并广播值更改事件。 - 该
<c-chart-bar>
组件根据其百分比值呈现条形图。
这三个组件中的每一个都有其自己的公共API,内部状态和行为。这些组件中的每个组件都可以具有自己的单元测试,以与其他组件隔离来验证其功能。事实上,对于在单元测试<c-api-property>
组件可以假设<lightning-card>
,<lightning-input>
和<c-chart-bar>
如预期的组件将执行,或者它可以模拟它们的行为在各种条件下,以模拟不同的方案。
在此示例中,端到端测试会将<c-api-property>
组件加载到浏览器页面中,在输入字段中输入百分比值,并断言相应的条形图渲染。作为端到端测试,没有任何数据或行为的模拟—您正在确认所有三个组件如何协同工作,就像它们部署到用户时一样。
摘要
下表是单元测试和端到端测试的优缺点的高级比较。
单元测试 | 端到端测试 | |
---|---|---|
测试运行很快 | 是 | 没有 |
测试可靠 | 是 | 没有 |
测试准确无误,可让您识别出确切的问题 | 是 | 没有 |
测试一次涵盖了应用程序的许多功能 | 没有 | 是 |
模拟真实用户 | 没有 | 是 |
既然您对单元测试和端到端测试之间的区别有了更多的了解,让我们看看它是如何在实践中完成的。本模块的其余部分着重于对Lightning Web组件进行单元测试。