【发布时间】:2019-06-10 10:29:36
【问题描述】:
我在为带有闭包的代码执行 qUnit 时遇到了麻烦。
快速概览,我正在运行 qUnit 2.5.0 和 sinon 4.3.0。
sinon 无法从 JsFileToTest_1.js 和 JsFileToTest_2.js 文件中检测到 iWantToTestThisOne_1() 函数。
所以现在,我无法掌握这个关闭的东西
另一件事是JsFileToTest_2.js 甚至不是闭包,而只是$(document).ready(function{}); 的alias。还是 sinon 检测不到里面的函数。
据我所知sinons 采用来自window 对象的方法。当我检查window 对象时。 JsFileToTest_2.jsandJsFileToTest_2.js`中定义的函数没有附加到它上面。
但是,当我尝试删除 (function($) { })(jQuery); 和 $(function() {}); 时,这些函数已经附加到 window 对象。
我的问题是,如果函数包含在闭包 (function($) { })(jQuery); 或 $(function() {}); 中,我该如何执行 qUnit 测试。我很难理解函数是如何附加的。另外,这可能是因为我还没有完全掌握通过 sinon 存根函数的方法。
见下面的例子
JsFileToTest_1.js
(function($) {
function iWantToTestThisOne_1() {
//do something
doSomething();
}
function iWantToTestThisOne_2() {
//do something
doSomething();
}
function iWantToTestThisOne_3() {
//do something
doSomething();
}
function doSomething() {
//doing something
}
})(jQuery);
JsFileToTest_2.js
$(function() {
function iWantToTestThisOne_1() {
//do something
doSomething();
}
function iWantToTestThisOne_2() {
//do something
doSomething();
}
function iWantToTestThisOne_3() {
//do something
doSomething();
}
function doSomething() {
//doing something
}
});
qUnitTestCode.js
QUnit.test('iWantToTestThisOne_1()', function(assert){
stub_doSomething = sinon.stub(window, "doSomething").returns("something");
assert.equal(stub_doSomething.called, true, "doSomething() is called");
});
QUnit.test('iWantToTestThisOne_2()', function(assert){
stub_doSomething = sinon.stub(window, "doSomething").returns("something");
assert.equal(stub_doSomething.called, true, "doSomething() is called");
});
QUnit.test('iWantToTestThisOne_3()', function(assert){
stub_doSomething = sinon.stub(window, "doSomething").returns("something");
assert.equal(stub_doSomething.called, true, "doSomething() is called");
});
【问题讨论】: