Facebook推出JavaScript单元测试和自动化Mock工具Jest

简介:
Facebook发布了Jest,一个开源的、基于Jasmine框架的JavaScript单元测试工具。
  Jest源于Facebook两年前的构想,用于快速、可靠地测试Web聊天应用。它吸引了公司内部的兴趣,Facebook的一名软件工程师Jeff Morrison半年前又重拾这个项目,改善它的性能,并将其开源。
  在最基础层面,Jest被设计用于快速、简单地编写地道的JavaScript测试。Jest自动模拟require()返回的CommonJS模块,并提供了包括内置的测试环境Dom API支持、合理的默认值、预处理代码和默认执行并行测试在内的特性。通过在并行进程中同时运行测试,Jest让测试更快地结束。
  Morrison说:
  Jest的目标是减少开始测试一个项目所要花费的时间和认知负荷,因此它提供了大部分你需要的现成工具:快速的命令行接口、Mock工具集以及它的自动模块Mock系统。
  此外,如果你在寻找隔离工具例如Mock库,大部分其它工具将让你在测试中(甚至经常在你的主代码中)写一些不尽如人意的样板代码,以使其生效。
  我们已经在Facebook亲眼看到花更多的时间用于开发你的应用是多么重要(相对于花时间去准备开发你的应用),而这就是Jest关注并正在解决的问题。
  Jest与Jasmine框架的区别是在后者之上增加了一些层。最值得注意的是,运行测试时,Jest会自动模拟依赖。Jest自动为每个依赖的模块生成Mock,并默认提供这些Mock,这样就可以很容易地隔离模块的依赖。Morrison说对于新测试,默认会进行隔离,开发人员现在也能够“完全控制”需要隔离多少模块。每个测试都可以指明哪些模块应该或者不应该Mock。
  关于自动化Mock,Facebook的文档有进一步的说明:
  实际上,Jest在测试环境中执行自己的require()函数。Jest的自定义require()函数加载真正的模块,检查它是什么样子,然后基于它所看到的创建一个Mock版本并返回。也就是说,Jest将给你一个与真实模块具有相同形状的对象,但它模拟每一个Export值而不是实际的值。
  尽管Jest引入了自动化Mock,需要注意的是,开发者仍然可以使用jest.mock()和jest.dontMock()控制哪些应该或者不应该进行Mock。
  来自社区的反应绝大部分都很正面。在Hacker News,用户Cthulu说:
  看起来很有趣:我们现在的AngularJS项目的测试套件越来越慢,部分原因是逐渐增加的测试,但主要的性能瓶颈是:
  没有并行,即使测试套件全部是独立的;
  DOM测试,导致大量的GC暂停;
  (可能是)PhantomJS启动和初始化(未度量)。
  我已经做了简单的优化,将我的那些测试分成两半,开两个终端运行(开发时和持续测试中),但它看来有点玄。
  直接应对依赖注入和AngularJS,Facebook说:“Jest使用不同的方法来达到相同的结果。”对于Angular,依赖作为参数进行传递,因此测试很容易写。然而,Facebook指出,为了Angular中函数的可测性,开发者必须遵循其特定模式,将其传递给Angular的依赖注入框架。Jest的解决方案略有不同:
  Jest也能以Angular相同的方式Mock依赖,但它使用CommonJS,而不是构建一个特定的模块加载器。这让你能够测试任何使用CommonJS的现有代码,不需要重度重构以使其兼容其它模块系统。
  用户Caiob认同关于Jest的乐观情绪,他也是这种依赖注入方法的拥护者,他说:“Facebook能够提升像Jasmine这样的现有/熟悉的工具,这非常棒。并且,我喜欢他们处理CommonJS模块的方式。”
  Morrison说,通过Jest,Facebook希望开始这样一种趋势,让测试变得更简单,让开发者有更多时间开发应用。读者如果想参与这个项目,可以检出Github库并发送Pull请求,或者在Freenode加入#jestjs。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
一键自动化博客发布工具,用过的人都说好(infoq篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到infoq上。
一键自动化博客发布工具,用过的人都说好(infoq篇)
一键自动化博客发布工具,用过的人都说好(cnblogs篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到cnblogs上。
|
5天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
16 0
|
5天前
|
开发者
一键自动化博客发布工具,用过的人都说好(阿里云篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到阿里云上。
一键自动化博客发布工具,用过的人都说好(阿里云篇)
一键自动化博客发布工具,用过的人都说好(oschina篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到oschina上。
一键自动化博客发布工具,用过的人都说好(oschina篇)
|
7天前
|
运维 关系型数据库 MySQL
Ansible自动化运维工具主机清单配置
Ansible自动化运维工具主机清单配置
一键自动化博客发布工具,用过的人都说好(segmentfault篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到segmentfault上。
|
7天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
13 1
|
9天前
|
Web App开发 JSON 数据格式
一键自动化博客发布工具,chrome和firfox详细配置
blog-auto-publishing-tools博客自动发布工具现在已经可以同时支持chrome和firefox了.
一键自动化博客发布工具,chrome和firfox详细配置
|
11天前
|
机器学习/深度学习 人工智能 测试技术
提升软件测试效率与准确性的策略与工具
【5月更文挑战第2天】 在软件开发生命周期中,测试阶段是确保产品质量的关键。然而,传统的测试方法往往耗时且容易出错。本文将探讨一系列现代软件测试策略和工具,旨在提高测试效率和准确性。我们将分析自动化测试框架、持续集成(CI)、测试驱动开发(TDD)以及人工智能(AI)在测试中的应用,并讨论如何结合这些技术和方法来优化测试流程。

热门文章

最新文章