恢复匿名 sinon.stub
Restoring an anonymous sinon.stub
我正在使用 Qunit 对一些 jQuery 进行单元测试。对于我的一些测试,我想存根一个函数(称为 cycle()),而对于以后的测试,我想调用原始函数。
我已经在模块中组织和分离了这些,但存根仍然存在。我从 sinon.js 文档中想到,一旦测试完成,原始功能将恢复(删除存根),当然是在移动到新模块之后。
部分困难似乎是我使用了匿名存根,因此很难简单地调用 stub.restore。
有什么建议吗?谢谢
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Javascript tests</title>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit 1.17.1.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">
<img id="logo" src="" width=100 height=100 alt="dummy logo">
<ol>
<li class="criterion">
<img id="gfx" src="" width=100 height=100 alt="dummy graphic">
<img id="SC1" class="tl-red"
src="../../../static/images/img_trans.png">Some text blurb
</li>
</ol>
<ol>
<li class="learning_outcome">
<img id="LO8" class="tl-red"
src="../../../static/images/img_trans.png" >More blurb...
</li>
</ol>
</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="http://code.jquery.com/qunit/qunit-1.17.1.js"></script>
<script src="../../../static/sinon.js"></script>
<script src="http://sinonjs.org/releases/sinon-qunit-1.0.0.js"></script>
<script src="../../../static/jQplugins/carhartl-jquery-cookie-fedc4cb/jquery.cookie.js"></script>
<script src="../../../static/traffic.js"></script><!--cycle defined in there-->
<script>
/*global $, test, equal */
module("Traffic light is bound to cycle function");
test("Double click LO triggers cycle function", function (assert) {
cycle = sinon.stub();
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
});
module("Cycle function tests");
test("The cycle function requires img argument", function (assert) {
assert.throws(function() {
cycle(); /*This is still stubbed out, but why? */
},
Error,
'passing no image throws Error');
});
</script>
</body>
</html>
遗憾的是,Sinon 不会自动为您自动恢复已删除的方法。
您在测试中所做的是用 Sinon 存根函数覆盖全局 cycle
。你不会把旧的留在身边来恢复,然后在测试结束时恢复它,这是你需要做的。
例如:
test("Double click LO triggers cycle function", function (assert) {
var origCycle = cycle;
cycle = sinon.stub();
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
cycle = origCycle;
});
你可能对sinon.stub(obj, "method")
语法感到困惑,它允许你在测试结束时调用obj.method.restore()
来恢复原来的方法,但你仍然需要手动恢复它你自己。
不过,如果您愿意,可以使用该语法:
test("Double click LO triggers cycle function", function (assert) {
sinon.stub(window, 'cycle');
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
window.cycle.restore(); // or even just `cycle.restore()`
});
如果您使用的是沙盒,则可以自动恢复存根。这是通过将测试用例函数包装在对 sinon.test(...)
.
的调用中来完成的
有关详细信息,请参阅 Sinon 沙箱文档:http://sinonjs.org/docs/#sandbox
我正在使用 Qunit 对一些 jQuery 进行单元测试。对于我的一些测试,我想存根一个函数(称为 cycle()),而对于以后的测试,我想调用原始函数。 我已经在模块中组织和分离了这些,但存根仍然存在。我从 sinon.js 文档中想到,一旦测试完成,原始功能将恢复(删除存根),当然是在移动到新模块之后。
部分困难似乎是我使用了匿名存根,因此很难简单地调用 stub.restore。
有什么建议吗?谢谢
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Javascript tests</title>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit 1.17.1.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">
<img id="logo" src="" width=100 height=100 alt="dummy logo">
<ol>
<li class="criterion">
<img id="gfx" src="" width=100 height=100 alt="dummy graphic">
<img id="SC1" class="tl-red"
src="../../../static/images/img_trans.png">Some text blurb
</li>
</ol>
<ol>
<li class="learning_outcome">
<img id="LO8" class="tl-red"
src="../../../static/images/img_trans.png" >More blurb...
</li>
</ol>
</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="http://code.jquery.com/qunit/qunit-1.17.1.js"></script>
<script src="../../../static/sinon.js"></script>
<script src="http://sinonjs.org/releases/sinon-qunit-1.0.0.js"></script>
<script src="../../../static/jQplugins/carhartl-jquery-cookie-fedc4cb/jquery.cookie.js"></script>
<script src="../../../static/traffic.js"></script><!--cycle defined in there-->
<script>
/*global $, test, equal */
module("Traffic light is bound to cycle function");
test("Double click LO triggers cycle function", function (assert) {
cycle = sinon.stub();
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
});
module("Cycle function tests");
test("The cycle function requires img argument", function (assert) {
assert.throws(function() {
cycle(); /*This is still stubbed out, but why? */
},
Error,
'passing no image throws Error');
});
</script>
</body>
</html>
遗憾的是,Sinon 不会自动为您自动恢复已删除的方法。
您在测试中所做的是用 Sinon 存根函数覆盖全局 cycle
。你不会把旧的留在身边来恢复,然后在测试结束时恢复它,这是你需要做的。
例如:
test("Double click LO triggers cycle function", function (assert) {
var origCycle = cycle;
cycle = sinon.stub();
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
cycle = origCycle;
});
你可能对sinon.stub(obj, "method")
语法感到困惑,它允许你在测试结束时调用obj.method.restore()
来恢复原来的方法,但你仍然需要手动恢复它你自己。
不过,如果您愿意,可以使用该语法:
test("Double click LO triggers cycle function", function (assert) {
sinon.stub(window, 'cycle');
$('img#LO8').dblclick();
assert.equal(cycle.calledOnce, true, 'cycle called after dblclick on LO');
window.cycle.restore(); // or even just `cycle.restore()`
});
如果您使用的是沙盒,则可以自动恢复存根。这是通过将测试用例函数包装在对 sinon.test(...)
.
有关详细信息,请参阅 Sinon 沙箱文档:http://sinonjs.org/docs/#sandbox