我知道可以写这样的东西
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/