一切福田,不離方寸,從心而覓,感無不通。

Jest

jest 是facebook推出的一款测试框架,集成了 Mocha,chai,jsdom,sinon等功能。

安装与配置

 

运行命令 jest 后会自动运行项目下所有.test.js和.spec.js这种格式的文件。涉及到运用 ES 或 react 的,要与babel相结合,加上.babelrc文件即可。jest的配置默认只需要在package.json中配置即可,当然也可以用独立的配置文件。

我们这里直接将 jest 的运行范围限定在test文件夹下,而不是全部,所以在package.json中加入如下配置:

 

注意到这里的匹配规则是正则表达式

基本用法

和之前介绍的 mocha 和 chai 的功能很像,甚至可以兼容部分 mocha 和 chai 的语法。可以这么写

 

jest与eslint检测

如果看了上面的代码会发现我没有引用任何类似于

 

的代码,而那个expect是没有定义的。
这段代码直接运行jest命令没有任何问题,但是eslint会检测出错,对于这种情况,我们可以再eslint配置文件.eslintrc中加入以下代码:

 

jest的断言

jest有自己的断言玩法。除了前面的代码中已经写到的

 

还有常用的

 

更多断言玩法

jest的 mock

介绍了jest替代mocha和chai的部分,那么接下来就看看如何替代sinon。
下面是官网的示例:

 

从上面可以看到这种玩法很类似于sinon的 sinon.spy()。当然也有类似于stub返回值的那种玩法,更多的请参考 jest mock的更多玩法

mock文件和css module的问题

如果js文件中引用了css或者本地其他文件,那么就可能测试失败。为了解决这个问题,同时也为了提高测试效率:

 

而fileMock.js文件内容为:

 

然后安装identity-obj-proxy即可:

 

jest与别名

在webpack中经常会用到别名,而jest测试时,如果文件中引用了别名会出现找不到文件的问题。毕竟jest测试时没有经过webpack处理。对于以下玩法

 

可以通过

 

这个和之前 mock文件和css module的问题 一样,都是使用了moduleNameMapper这个属性

生成测试覆盖率报告

只需要在jest命令后加入 --coverage即可

 

13人点赞

作者:我向你奔
链接:https://www.jianshu.com/p/eaaf07c1b88f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。