QUnit - 等于 assert.equal?

QUnit - equal vs assert.equal?

我知道可以这样写

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

如 QUnit 文档中所述。

不过,也有可能做到这一点

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

我在第二个版本的问题是这个ok方法没有解决,我不能去实现,但是,我在第一个案例中看到的问题是我需要通过这个 assertverificationMethod 如果我有一个,这感觉很奇怪。

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

过去我们(JS 社区)定义一堆全局函数(比如你的例子中的 ok())没有问题。但是随着我们的成长,我们已经意识到这种对全局命名空间 (window) 的污染是一个坏主意。这就是您在原始 post.

中的第二个示例中的内容

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

来确认这一点

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

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

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