[译] JavaScript 单元测试框架:Jasmine, Mocha, AVA, Tape 和 Jest 的比较

JavaScript 单元测试框架: Jasmine, Mocha, AVA, Tape 和 Jest 的比较

当开始开发新前端项目的时候,我常常会问本身两个问题:“我应该用那一个 JavaScript 单元测试框架呢?” 和 “我应该花时间去添加测试代码吗?”javascript

个人同事常常写一些有关单元测试如何让脑子平静下来且减小软件错误的文章。因此我也总会花时间来作测试。可是在你的项目中应该选那个框架来作测试呢?在匆忙作出决定以前,我搜集了 5 个最受欢迎的 JavaScript 单元测试框架,让你决定那一个才是最合适你的。html

有效的单元测试是减小你软件错误的一部分。要让你的单元测试更健壮还须要用到一些 JavaScript 调试小技巧前端

注意:若是你已经有更喜欢的测试框架而且它没有出如今下面列表中,在评论中让我知道我会添加到文章中。java

JavaScript 单元测试框架:比较

Jasmine

Jasmine 是一个咱们要比较的 JavaScript 单元测试框架

最受欢迎的 Javascript 单元测试框架之一,Jasmine提供全部你所须要的功能而且开箱即用。android

  • Jasmine 带有 assertions(断言),spies (用来模拟函数的执行环境),和 mocks (mock 工具),很是完美地配备几乎是你开始写单元测试时须要的全部东西。Jasmine 初始化设置简单同时若是你须要一些单元功能的时候你仍然能够加一些库进来 (括号内容:译者注)
  • 全局性使它更容易在你的应用中当即开始测试。虽然我并不喜欢全局性,可是和 Jasmine 提供给开发者所有须要的开箱即用功能,并无太多的不一致的地方
  • 我发现独立版本能让它更容易去理解全部东西是怎样设置的,并能让你能马上开始使用它
  • 时至今日已经能和 Angular 1 或者 Angular 2 或者更多流行库组合使用了

我对 Jasmine 的见解ios

我不是占有全局变量环境的粉丝,因此 Jasmine 会在个人小本子上面丢些分。在另外一方面,它有不少很好的即开即用功能。它看上去会显得稍微 “老些” 比起其它在这列表的框架,可是这并非一件坏事,其它框架可能遇到的痛点,意味着它们更应更容易被解决。git

AVA

AVA 是一个咱们要比较的 JavaScript 单元测试框架

一个简约的测试库,AVA 它的优点是 JavaScript 的异步特性和并发运行测试, 这反过来提升了性能。angularjs

  • AVA 不会建立全局环境给你,所以你能更容易控制你所使用的内容。我想这会给测试带来额外的清晰度确保你清楚什么正在发生
  • 利用了 JavaScript 的异步特性优点为测试提供了额外的好处。最主要的好处是优化了在部署的时间等待
  • 保留了简单的 API 为你提供你所须要的功能。若是你搭配 mocking 来使用它会显得更加友好,可是你必须安装一个单独的库
  • 当你想知道应用 UI 何时会有超出预期的改变的时候 jest-snapshot 提供了很是好用的快照测试

我对 AVA 的见解es6

Ava “最有见地的” 是极简方法, 还有他不是占有全局环境的,这让他在个人小本子上得到很高的分数。简单的 API 让测试更清晰。在你选择 JavaScript 单元测试框架的时候,AVA 测试库你是绝对应该尝试的。github

Tape

Tape 是一个咱们要比较的 JavaScript 单元测试框架

这是在这份框架列表上最小的一个框架,Tape 是最直接开门见山的,提供最基础的功能。

  • 就像 AVA 同样,Tape 不提供全局环境,取而代之的是得要你本身导入他们。 这仍是很不错的只要它不污染到全局环境
  • Tape 不包括安装/卸载方法. 取儿替之的是, 它选择了一个多模块系统在那里你须要明肯定义安装代码在每个测试里面以使每一个测试更清晰。 它同时会阻止状态在测试之间共享
  • 支持 Typescript/coffeescript/es6
  • 简易快速地搭建以及运行,Tape 是一个你能够在任何能够运行 JavaScript 的环境中运行的 JavaScript 文件,而且没有过多的配置选项

我对 Tape 的见解

Tape 包含更底层,比 AVA 功能更少的 API,并以此为傲。Tape 让全部事情变得简单,只给你所须要的东西。这就是为何 Tape 在个人小本子上有着高分数而且是最好的 JavaScript 单元测试框架之一,它让你更专一于产品而不是工具的选择。

Mocha

Mocha 是一个咱们要比较的 JavaScript 单元测试框架
Mocha logo

做为能够说是使用最多的库,Mocha 是一个灵活的库,提供给开发者的只有一个基础测试结构。而后其它功能性的功能如 assertions, spies,mocks,和像它们同样的其它功能须要引用添加其它库/插件来完成。

  • 若是你想要更灵活的配置,导入你特定须要的库,那么 Mocha 额外的安装与所须要的配置是你必需要看的
  • 不幸的是,上面的观点确实还存在问题,它必须导入额外的库来实现 assertions (译者注:断言功能)。若是不是长时间使用,这确实意味着比其它的更难一点去设置. 他们说,设置一般只是一次性操做,可是我更喜欢去作一个 “单一来源的事实” (文档) 代替在文档间跳来跳去地设置
  • Mocha 导入测试结构做为全局变量,省去你的时间你再也不须要 include 或者请求它在每一个文件中。缺点是不管如何那些插件仍是要你使用 require 导入到里面,这会致使不一致,若是你像我同样是个 OCD (译者注:强迫症患者) 它最终会把你弄疯的!

我对 Mocha 的见解

可扩展性和数种不一样配置 Mocha 的方式另我印象深入。必须去学习 Mocha,而后也必须去学习你选择的 assertion 库这的确吓到了我很多。灵活性在于它的 assertions,spies 和 mocks 带给它的高收益。

Jest

Jest 是一个咱们要比较的 JavaScript 单元测试框架

被 Facebook 和各类 React 应用推荐和使用,Jest 获得了很好的支持。Jest 也被发现是一个很是快速的测试库在平行测试报告中。

  • 对于小型项目来讲你可能在开始的时候不用过多担忧,而性能的提升对于但愿全天 持续部署 的大型应用 app 来讲是很是之好的
  • 而开发人员主要是用 Jest 去测试 React 应用,Jest 能够很容易地集成到其它应用程序中充许你使用更独特的特性在其它地方
  • 快照测试是一个很是好用的工具去确保你的应用 UI 不会有超出预期的错误在产品发布替换的期间发生。虽然大部分功能专门设计都是使用在 React 上,可是它也能在其它框架上面若是你能找到合适的插件
  • 不像在这列表上其它的库,Jest 有着很广阔的 API ,除非你真的须要一些额外的功能需求,否则不须要你导入额外的库 随着他们的每一次更新Jest 继续大幅改进功能

我对 Jest 的见解

在全局变量是一个缺点,Jest 是一个不断发展功能强大的库。它有不少易于理解的文档帮助学习,而且支持各类不一样环境,当构建项目的时候这些环境都显示很棒。

我应该选那一个 JavaScript 单元测试框架?

在我研究了一些不一样的框架以后,我得出一个结论,框架并不是都是非黑即白的。

大部分框架最终都会(Mocha 除外)在一天结束的时候提供给你你所须要的东西,这是一个测试环境同确保给出的 X -> Y 总回被返回的机制,有几个会简单的会给你更多 “华而不实的东西。”

你在选择他们的时候你本身应该充满自信,而个人选择取决于你和你特定项目想要的和须要的。

  • 若是你要求有一个普遍的 API 和特定 (可能独一无二) 的功能那么 Mocha 可能会是你的选择 由于可扩展性就在那里
  • AVA 或者 Tape 会给你最低的环境要求。很是好地为你提供一个坚实的最基础环境让你能快速开展测试
  • 若是你有一个大项目, 或者想快速开始不须要太多配置,那么 Jest 将会是一个很好的选择

我但愿这将在你选择你的 JavaScript 单元测试框架时有所帮助。若是你但愿我还看一下其它 JavaScript 单元测试框,在评论中让我知道!我会将它们稍后加到列表中。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索