前言
在前端开发中,我们经常要进行各种测试,而测试框架中最常用的是 Chai,它是一个 BDD / TDD 库,可以方便地编写断言和测试用例。其中 chai.expect() 方法是很常用的,但使用方法有些麻烦,需要引入 chai 库,而在 eslint 中使用时还需配置 eslint-plugin-chai-expect 插件,因此我们可以封装一个更方便使用的猪脚方法。
博客背景
知乎大神 @W-Tiger 在他的这篇博客中提到了 eslint-plugin-chai-expect,但仅仅是介绍了这个插件的用法和原理,并没有详细讲解如何封装猪脚方法。
猪脚方法
我们可以封装一个 chaiExpect 方法,该方法的作用和 chai.expect 一样,只是使用更方便、更简单。具体封装方法如下:
const chai = require('chai'); const expect = chai.expect; module.exports = (actual) => expect(actual);
这个方法非常简单,我们导入 chai 模块,然后给模块中的 expect 方法取一个别名,最后返回 expect 方法即可。使用该方法也非常简单:
const chaiExpect = require('./chaiExpect'); it('test chaiExpect', () => { chaiExpect(1).to.be.a('number'); });
因为 chaiExpect 直接返回了 expect 方法,因此我们可以像普通使用 expect 一样使用它。
拓展功能
我们还可以拓展 chaiExpect 方法,使其支持更多的 chai 断言,以下为一个示例:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------ ----- -------------- - ---------------------------- ------------------------- -------------- - -------- -- - ----- ---------- - --------------- -------------------------- - ------- -- ---------------------------- -- ---------------------- ------ ----------- --
我们首先导入 chai-as-promised 模块,使用 chai.use 加载该模块,使 chaiExpect 可以使用 to.be.rejected 和 to.be.fulfilled 等异步断言。然后我们将 chaiExpect 作为返回值,并在该对象的基础上,再自定义一个 toBeContainedIn 方法,使其可以检查一个值是否存在于一个数组中。该方法的实现使用了 chaiExpect 自带的 satisfy 断言,并传入了一个匿名函数,该函数判断 item 是否存在于数组中。这样我们就可以在测试用例中愉快地使用该方法:
it('test chaiExpect with custom toBeContainedIn', () => { chaiExpect([1, 2, 3]).toBeContainedIn([2, 3, 4]); });
这是一个仅仅拓展了一个断言的示例,我们还可以通过类似的方式拓展更多更复杂的断言。
总结
eslint-plugin-chai-expect 提供了 ESLint 中引入 chai 断言的方便方式,而我们封装的猪脚方法则是在使用 chai.expect 时的进一步优化,使之更易用,更方便,也更加高效。当然,这些只是小小的探索,通过封装 chaiExpect,我们还可以进行更多的扩展,从而提升我们的测试效率和质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645d06b8968c7c53b0f8eeaa