【发布时间】:2014-12-31 04:31:15
【问题描述】:
我有以下(简化的)javascript 模块,它使用 jQuery Cookie 插件来检查是否启用了 cookie。如果 cookie 被禁用,它会警告用户:
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>');
}
}
};
})();
我有以下单元测试:
QUnit.test("When cookies are enabled the cookie policy text remains unchanged", function (assert) {
sinon.mock($).expects("cookie").once().withExactArgs("check", "valid", { expires: 1 });
sinon.mock($).expects("cookie").once().withExactArgs("check").returns("valid");
cookiePolicy.updateCookiePolicy();
assert.equal(0, $('#cookie-warning').length, "Failed!");
});
测试失败,因为“cookie 已被包装”。我认为这是因为我在为 set 和 read 嘲笑 $.cookie。如何在此测试中模拟对 $.cookie 的调用以进行设置和读取?
【问题讨论】:
-
您是否收到来自 QUnit 的错误?还是只是一次失败的测试?您可以将整个输出粘贴为您的问题的更新吗?我认为解决方案是正确检查
cookie模拟是否预期出现,每次模拟cookie时它都会生成一个新对象,但您实际上并没有检查该返回值。
标签: javascript jquery unit-testing qunit sinon