javascript - QUnit - equal 与assert.equal?

标签 javascript qunit

我知道可以写这样的东西

QUnit.test( "hello test", function( assert ) {
  assert.ok( 1 == "1", "Passed!" );
});

正如 QUnit 文档中提到的。

但是,也有可能这样做

QUnit.test( "hello test", function() {
  ok( 1 == "1", "Passed!" );
});

在第二个版本中,我遇到的问题是这个 ok 方法没有得到解决,我无法进行实现,但是,我在第一个版本中看到的问题是我需要将此 assert 传递给 verificationMethod(如果我有的话),这感觉很奇怪。

那么,哪种方式更好,为什么?

最佳答案

以前,我们(JS 社区)定义一堆全局函数(如示例中的 ok())没有任何问题。但随着我们的成长,我们意识到这种全局命名空间(window)的污染是一个坏主意。这就是您原始帖子的第二个示例中的内容。

当 JavaScript 在局部作用域中找不到变量(包括函数)时,它就开始沿着作用域链向外查找。最终 JS 引擎将到达 window 对象 - 我们在浏览器 JavaScript 中的全局上下文。如果引擎仍然找不到变量,那么我们会得到一个ReferenceError。在您的例子中,ok 函数是在 window 对象上创建的。您可以通过检查 window.ok === ok 来确认这一点。

但正如我所说,我们作为一个社区,已经脱离了全局职能。几年前,QUnit 决定提供一个更好的接口(interface)来避免全局函数,从而防止潜在的命名冲突。它有两种形式:QUnit 全局命名空间和 test 回调函数中的 assert 参数。 (我们过去只编写 test(function() { ... }) ,根本没有 QUnit 命名空间。)

所以...回答您的问题...您应该使用第一种形式 (assert.ok()),因为这意味着您不依赖于全局定义的 ok 函数存在,它实际上可能与其他库发生冲突。当 QUnit 执行您的测试函数时,它将为该测试函数提供 assert 参数,该参数将指向 QUnit 框架中内置的断言库。 (此外,您会注意到所有 examples on the QUnit site 都使用此形式。)

您可以read more about this change在 2.x 升级的文档中。

关于javascript - QUnit - equal 与assert.equal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42805370/

相关文章:

javascript - 如何为包含 SAPUI5 Core API 的函数编写单元测试?

Javascript 删除 jQuery 事件并获取用户输入

javascript - 使用 jquery 最接近方法查找表行不起作用

javascript - 如何判断 "123@231.23"不是 JavaScript 中的数字?

javascript - 带有 jsmock 测试的 qunit 失败,我不知道为什么 :)

javascript - qunit 返回单元测试

javascript - 加载模板时出现异常。下划线/ Backbone

javascript - 使用 Ember.js 从 Laravel 后端加载 Mysql 数据

javascript - QUnit 不会运行测试