2014-11-04 81 views
0

我有以下(簡化)的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

回答

1

你的假設是正確的。根據興農的版本,你使用,你可以做這樣的事情:

順便說一句,這是奇怪的使用興農嘲笑,而無需使用.verify()。也許存根會更合適?

+0

謝謝,我根據您的建議使用存根工作。 – ChaoticNadirs 2014-12-11 09:06:44