QUnit - 相等vs assert.equal?

时间:2017-03-15 09:12:01

标签: javascript qunit

我知道可以写这样的东西

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如果我有一个,这感觉很奇怪。

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

1 个答案:

答案 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