javascript - 您使用过哪些 JavaScript 单元测试和模拟框架?

标签 javascript jquery unit-testing mocking qunit

<分区>

我的主要 JavaScript 框架是 jQuery ,所以我希望我的单元测试和模拟框架与之兼容。我宁愿不必介绍另一个 JavaScript 框架。

我目前正在使用 QUnit用于单元测试和 Jack用于模拟,但我对 JavaScript 的整个单元测试还很陌生。

有更好的工具推荐吗?什么对您有用?

最佳答案

我认为 Jack 是截至撰写本文时最好的 JavaScript 模拟框架。主要原因是适合 JavaScript 的东西不太可能适合 Java 等强类型语言。

许多 JavaScript 模拟框架都受到 Java 模拟框架的启发(例如优秀的 JsMockito)。但是这些的问题是它们需要 依赖注入(inject),因为这是在 Java 中使用模拟的唯一合理方式。但是在 JavaScript 中,有许多方法来使用模拟,并且您不会被迫在所有地方使用依赖注入(inject)。

例如,使用 JsMockito,您必须制作模拟,然后将这些模拟传递给您的被测软件 (SUT)。 SUT 必须直接调用模拟。因此,您不得不将 SUT 编码为构造函数或函数,将其所有依赖项作为参数。 (有时,这是实现它的好方法,但并非在所有情况下都如此。如果您的模拟框架的设计强制采用您的实现方法,那尾部就在摇尾部了。)

在 JavaScript 中,很容易“劫持”任何函数。因此,有很多方法可以构建一些东西,这样您就可以模拟它的某些部分,而无需显式地将其依赖项注入(inject)其中。例如,Jack 允许您模拟任何 函数,无论它是公共(public)的还是在本地对象上。从那里您可以监视它、 stub 或表达对它的期望。关键点在于:一旦您模拟了一个函数,任何对该原始函数的调用都将被定向到您的模拟。换句话说,即使调用了原始的、未模拟的函数,您的模拟仍将被使用。因此,您不会被迫注入(inject)依赖项,尽管在需要它的情况下您当然可以这样做。

JavaScript 是一种不同于 Java(和 C# 等)的语言。它允许不同的实现习惯用法。 <强> Dependency injection仍然是 JavaScript 工具箱中的一个有值(value)的工具,但它不再是镇上唯一的游戏。您的模拟框架需要了解并尊重这一事实。 Jack 和其他几个人这样做,但在这样做的人中,Jack 似乎是最成熟和功能最丰富的。

关于javascript - 您使用过哪些 JavaScript 单元测试和模拟框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209418/

相关文章:

jQuery 或 Silverlight 在哪种情况下都可以工作?

c# - Moq 单元测试用例 - 带有 WebAPI 的 ASP.NET MVC

javascript - 使用reflux创建一个公共(public)组件,最后一个组件的数据替换所有

javascript - 匹配带引号和不带引号的相同字符串的正则表达式

javascript - 如何在 Selenium IDE 中运行嵌入页面的脚本?

javascript - JavaScript 源代码中的 %functions 是什么?

javascript - 使用 'background-size: contain' 在具有背景的 flexbox 中居中内容

javascript - 通过 Bootstrap 加载/重置后更改按钮文本

unit-testing - Angular 2 + Jasmine - 测试元素是否可见

asp.net - 针对测试数据库集成测试 Web 服务