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

问题描述:

我有以下(简化)的JavaScript模块,它使用jQuery Cookie插件来检查cookie是否启用。如果禁用Cookie它警告用户:QUnit/Sinon:测试一个函数,检查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被包裹已”。我认为这是因为我嘲笑$ .cookie的设置和阅读。如何在本次测试中嘲笑$ .cookie的设置和阅读?

+0

您是否收到来自QUnit的错误?或者只是一个失败的测试?你可以粘贴整个输出作为你的问题的更新?我认为解决方案是适当地检查'cookie'模拟的预期发生,每次你嘲笑'cookie'它产生一个新的对象,但你实际上并没有检查返回值。 – jakerella 2014-11-04 15:46:06

你的假设是正确的。根据兴农的版本,你使用,你可以做这样的事情:

顺便说一句,这是奇怪的使用兴农嘲笑,而无需使用.verify()。也许存根会更合适?

+0

谢谢,我根据您的建议使用存根工作。 – ChaoticNadirs 2014-12-11 09:06:44