Javascript QUnit/Sinon:测试检查cookie是否已启用的功能
我有以下(简化的)javascript模块,它使用jQuery Cookie插件检查Cookie是否已启用。如果禁用Cookie,它会警告用户:Javascript QUnit/Sinon:测试检查cookie是否已启用的功能,javascript,jquery,unit-testing,qunit,sinon,Javascript,Jquery,Unit Testing,Qunit,Sinon,我有以下(简化的)javascript模块,它使用jQuery Cookie插件检查Cookie是否已启用。如果禁用Cookie,它会警告用户: var cookiePolicy = (function () { var cookiesEnabled = function () { return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid'; }
var cookiePolicy = (function () {
var cookiesEnabled = function () {
return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid';
};
return {
updateCookiePolicy: function () {
if (!cookiesEnabled()) {
$("#cookie-policy").append('<p id="cookie-warning">Cookies are disabled. Some features of this site may not work correctly.</p>');
}
}
};
})();
测试失败,因为“cookie已包装”。我假设这是因为我在模拟set和read的$.cookie。在本测试中,如何模拟对$.cookie的调用以进行设置和读取?您的假设是正确的。根据您使用的Sinon版本,您可以执行以下操作:
// UUT
var foo = {
bar: function() {}
};
// Test setup
var mock = sinon.mock(foo);
var expectation = mock.expects('bar').twice();
expectation.onFirstCall().stub.calledWithExactly('baz');
expectation.onSecondCall().stub.calledWithExactly('qux');
// Test
foo.bar('baz');
foo.bar('qux');
mock.verify();
顺便说一句,使用Sinon Mock而不使用
.verify()
是很奇怪的。也许存根会更合适?您是否收到来自QUnit的错误消息?还是只是一次失败的测试?能否将整个输出粘贴为问题的更新?我认为解决方案是正确地检查cookie
mock是否出现预期的事件,每次模拟cookie
时,它都会生成一个新对象,但实际上并不检查返回值。
// UUT
var foo = {
bar: function() {}
};
// Test setup
var mock = sinon.mock(foo);
var expectation = mock.expects('bar').twice();
expectation.onFirstCall().stub.calledWithExactly('baz');
expectation.onSecondCall().stub.calledWithExactly('qux');
// Test
foo.bar('baz');
foo.bar('qux');
mock.verify();