接下来,我们给funkyNum函数编写测试。
编写测试时,应该尽量多地覆盖函数的分支和语句。测试覆盖率越高会让人越有信心。
如果你再次运行测试,应该会看到以下输出。
理想情况下,我们也应该为isFibonacci和isPerfectSquare函数编写单独的describe语句块。在单元测试中,测试代码应该是互相独立的。简洁起见,这里我们没有这样做。
小提示
1. 通过调用.skip或test.skip来跳过任何测试,或调用describe.skip来跳过整个测试块。
2. 通过调用it.only或test.only执行单个测试。
上面我们已经介绍了如何使用Jest进行JS代码的测试。现在,让我们深入探讨下关于React的测试。
在开始之前,我们还需要安装一些依赖库:
同时,还需要在jest.config.ts中添加环境:
下面我们给CounterButton组件编写一个最基础的测试:
在上面的代码中,我们提供了所需的props,并尝试渲染组件。对于任何组件,这都应该是你为它编写的第一个测试。因为如果该测试无法通过,那么其他测试就毫无用处。
RTL(ReactTestingLibrary)的render函数将在document.body中渲染传入的组件。
它还返回了一些诸如getByText这样的查询方法,可用于在DOM中查找元素。
如果你再次运行测试,应该可以看到2组测试——全部为绿色且通过。
我们编写的第二个测试是测试组件对于props的反应。如果各个prop之间没有互相依赖,那么应该为每个prop参数都编写单独的测试。
getByText函数是一种查询方法,可以让我们通过字符串来获取元素。
toBeInTheDocument函数是一个和toEqual类似的匹配器。Jest默认不提供该函数,需要在安装@testing-library/jest-dom库之后才能使用。
不同的环境有不同的包,例如在ReactNative环境中,需要使用@testing-library/jest-native。
如果你再次运行测试,测试应该也会通过。
最后,我们来编写本文的最后一个测试,同时也是最重要的一个。我们将编写一个测试来检查点击事件处理程序是否按预期工作。
为了生成用户事件(例如点击和按键),我们需要安装另外一个包。
与之前的测试代码相比,这次的测试代码几乎一样,只有一些微小的差异。
注意:由于是模拟用户事件,所以该函数异步执行。
第一行的jest.fn()是一个模拟函数。在测试运行时,可以通过它跟踪诸如调用参数、调用次数等很多非常有用的信息。类似这样的函数,以后你会看到很多。
我们还使用了一种新的查询方法getByRole来查找按钮元素。
在检查模拟函数是否被调用之前,我们需要先等待点击事件完成。
就是这样!如果你运行测试,它们应该也会通过。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理