我知道可以写这样的东西
Date Value
2015-12-31 0
2015-12-30 0
2015-12-29 0
2015-12-28 0
2015-12-27 0.25
2015-12-26 0
2015-12-25 1.52
2015-12-24 0
2015-12-23 0
2015-12-22 0
2015-12-21 0
2015-12-20 0
2015-12-19 0
2015-12-18 0
2015-12-17 0.25
2015-12-16 7.62
如QUnit文档中所述。
然而,也有可能这样做
QUnit.test( "hello test", function( assert ) {
assert.ok( 1 == "1", "Passed!" );
});
第二个版本中的问题是这个QUnit.test( "hello test", function() {
ok( 1 == "1", "Passed!" );
});
方法没有解决,我不能去实现,但是,我在第一个案例中看到的问题是我需要传递这个{ {1}} ok
如果我有一个,这感觉很奇怪。
那么, 哪种方式更好,为什么?
答案 0 :(得分:3)
当天我们(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都使用此表单。)
您可以在2.x升级的文档中read more about this change。