我知道可以写这样的东西QUnit.test( "hello test", function( assert ) { assert.ok( 1 == "1", "Passed!" );});正如QUnit文档中提到的那样。但是,也有可能这样做QUnit.test( "hello test", function() { ok( 1 == "1", "Passed!" );});在第二个版本中,对我来说问题是此ok方法未解决,我无法继续执行,但是,在第一种情况下看到的问题是我需要将此assert传递给如果我有一个,那感觉很奇怪。那么,哪种方法更好,为什么呢? 最佳答案 过去,我们(JS社区)在定义一堆全局函数(例如您的示例中的ok())时没有问题。但是随着我们的成长,我们意识到对全局名称空间(window)的这种污染是一个坏主意。这就是您原始帖子的第二个示例中的内容。当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升级。关于javascript - QUnit-等于vs assert.equal?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42805370/ 10-15 21:35