我想向QUnit添加新的断言。 我做了一件事:
QUnit.extend(QUnit.assert, {
increases: function(measure, block, message){
var before = measure();
block();
var after = measure();
var passes = before < after;
QUnit.push(passes, after, "< " + before, message);
}
});
当我在测试中使用increases(foo,bar,baz)
时,我得到了
ReferenceError:未定义增量
在浏览器控制台中,我可以看到increases
中的QUnit.assert
以及所有其他标准功能:ok
,equal
,deepEqual
等
从控制台运行:
test("foo", function(){console.log(ok) });
我看到了ok
的来源。
运行:
test("foo", function(){console.log(increases) });
我被告知增加没有定义。
在测试中使用增加所需的魔力是什么?此外,哪里(如果有的话)是文件?
由于
答案 0 :(得分:5)
我发现解决方案是接受测试回调函数中的参数。该参数将具有额外的断言类型。所以我们可以这样称呼它:
//the assert parameter accepted by the callback will contain the 'increases' assertion
test("adding 1 increases a number", function(assert){
var number = 42;
function measure(){return number;}
function block(){number += 1;}
assert.increases(measure, block);
});
答案 1 :(得分:2)
我今天尝试添加自定义断言并遇到了同样的问题。 仅在全局对象中定义原始断言函数。自定义断言不是。
从调试QUnit代码看,原始断言函数似乎是故意放在全局作用域 - 窗口变量上。这在QUnit的初始化时发生,因此它仅适用于当时已定义的原始断言函数。
1.QUnit.js:原始断言函数的定义
assert = QUnit.assert = {
ok: function( result, msg ) {
...
2.QUnit.js:原始断言功能 - &gt; QUnit.constructor.prototype
extend( QUnit.constructor.prototype, assert );
3.QUnit.js:QUnit.constructor.prototype - &gt;窗口
// For browser, export only select globals
if ( typeof window !== "undefined" ) {
extend( window, QUnit.constructor.prototype );
window.QUnit = QUnit;
}
<强>解决方案强>
所以当你回答时,为了使用自定义断言功能,需要:
捕获传递给每个断言函数的assert
参数并使用它。
恩。
test("test name", function(assert) {
assert.cosutomAssertion(..);
...});
或使用完整命名空间来访问断言函数。 恩。
QUnit.assert.customAssertion(..)