Typescript 测试驱动开发 TDD (8)

发布时间 2023-09-21 13:53:53作者: 林鑫76

强制运行和跳过测试  (Forcing and skipping tests)


在处理一个已经编写了多个测试的应用程序时,我们通常只想运行特定的测试或者一组特定的测试。这种操作被称为强制运行测试,因为我们要求整个测试套件只运行指定的测试。可以通过以下两种方式来实现:

1 describe("a group of tests", () => {
2     test.only("first test", () => {
3          expect("string value").toEqual("string value")
4     })
5 
6     fit("second test", () => {
7         expect("abc").not.toEqual("def");
8     })
9 });

在这里,我们使用test.only函数而不是仅使用test函数来强制运行名为"first test"的测试。我们还使用fit函数而不是仅使用it函数来强制运行名为"second test"的测试。此次测试运行的输出如下:

(强制测试下 Jest 的命令行输出)

在这里,我们可以看到测试运行只包括了名为"first test"和"second test"的测试,这些是我们强制执行的测试。还要注意,现在有一些跳过的测试,并且Jest会报告跳过的测试数量以及实际运行的测试数量。

 

使用it函数(Jasmine默认)而不是test函数(Jest默认)进行测试意味着我们只需要在一个it测试前加上字母f来强制执行它,即fit与it。这样做可以节省很多时间,而不必输入test.only来强制执行一个非常规的测试。因此,在本系列剩余部分中,我们将采用Jasmine风格的it测试命名约定来创建测试。

 

测试组也可以通过在describe函数前加上字母"f"来强制执行,如下所示:

 

1 fdescribe("a group of tests", () => {
2     test("first test", () => {
3          expect("string value").toEqual("string value")
4     })
5     it("second test", () => {
6          except("abc").not.toEqual("def");
7     })
8 });

 

在这里,我们使用了fdescribe函数来定义我们的测试组,名为“a group of tests”,而不是标准的describe函数。使用fdescribe将强制整个测试组包含在测试运行中。

 

强制测试的相反是跳过测试 (skip tests)。要跳过一个测试,我们可以在测试前加上字母x,这样它就变成了xit,如下所示:

1 fdescribe("a group of tests", () => {
2     test("first test", () => {
3         expect("string value").toEqual("string value")
4     })
5     xit("second test", () => {
6         expect("abc").not.toEqual("def");
7     })
8 });

在这里,我们使用fdescribe强制运行名为“a group of tests”的测试组,并使用xit而不是it跳过名为“second test”的测试。以下是此测试运行的屏幕截图:

 (命令行输出显示Jest跳过一个测试)

 

在这里,我们可以看到同时使用fdescribe强制运行一组测试,并使用xit跳过一个测试。名为“a group of tests”的测试组被强制执行,因此只有“first test”和“second test”会被运行。然而,我们通过使用xit而不是it来跳过了名为“second test”的测试。这意味着唯一未被跳过的位于该测试组中的测试是“first test”。

请注意,跳过测试绝对不是一个好主意。编写单元测试的目的是确保我们的应用程序按预期运行,并且测试是描述该行为应该如何的一种方式。

 

如果已经编写了一个测试,那么应该重视它,并且任何代码更改都应确保测试仍然通过,或者更新测试以适应新的行为。仅仅因为测试失败而跳过它们是反对测试驱动开发的本质,应该尽一切努力避免这种情况。