首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUnit/Sinon:测试一个检查是否启用cookie的函数

QUnit/Sinon:测试一个检查是否启用cookie的函数
EN

Stack Overflow用户
提问于 2014-11-04 10:10:54
回答 1查看 781关注 0票数 0

我有以下(简化的) javascript模块,它使用jQuery Cookie插件来检查是否启用了Cookie。如果禁用cookie,则警告用户:

代码语言:javascript
复制
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>');
            }
        }
    };
})();

我有以下单元测试:

代码语言:javascript
复制
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已经包装好了“。我想这是因为我在嘲笑$.cookie的设置和读取。如何在此测试中模拟对$.cookie的调用以进行设置和读取?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 19:19:30

你的假设是正确的。根据您使用的Sinon版本的不同,您可以这样做:

代码语言:javascript
复制
// 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();

顺便说一句,不使用.verify()就使用Sinon模拟是很奇怪的。或许存根会更合适?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26732523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档