![](/img/trans.png)
[英]QUnit/Sinon: testing a function which checks if cookies are enabled
[英]Testing function which checks if cookies are enabled with Qunit
我有以下 function 检查是否在用户的浏览器中启用了 cookies:
CookiesEnabled: function() {
var cookieEnabled = navigator.cookieEnabled;
if (!cookieEnabled) {
document.cookie = "test_cookie";
cookieEnabled = document.cookie.indexOf("test_cookie") != -1;
}
return cookieEnabled;
},
我想对使用 Sinon/QUnit 进行单元测试,但我不确定如何正确处理这个问题,因为我对使用 Sinon 或 QUnit 不是很有经验。 这是我尝试进行测试的尝试:
QUnit.test("CookiesEnabled - returns true if user has enabled cookies in their browser", function (assert) {
sinon.stub(CookieHelper, "CookiesEnabled")
.callsFake(function () {});
var result = CookieHelper.CookiesEnabled();
Assert.Equal(result, true);
CookieHelper.CookiesEnabled.restore();
});
请谁能指出我使用 Qunit 和 Sinon 对这种方法进行单元测试的正确方向? 谢谢你。
更新的尝试:
QUnit.test("CookiesEnabled - returns true if user has enabled cookies in their browser", function (assert) {
sinon.stub(navigator, "cookieEnabled").callsFake(function () {
return true;
});
var result = CookieHelper.CookiesEnabled();
assert.equal(result, true);
});
如前所述, window.navigator
是只读的。 有些事情你可以尝试伪造浏览器,但实际上,你应该只注入你感兴趣的属性供 function 使用。 这样您就可以覆盖浏览器设置或对其进行测试。 请注意添加了两个 arguments(因为您还需要绕过对 cookie 设置的双重检查)。
附加的flag
参数是 boolean,它基本上告诉 function cookieEnabled
的值应该是什么(与使用navigator.cookieEnabled
相比)。 但是,如果缺少该参数,代码将使用浏览器设置。 换句话说,这是一种“注入”你想要的值的方法,在测试中非常有用。 这并不理想,但如果没有更多的工作和 mocking(使用禁用 cookies 的无头浏览器),您就无法做到。
这是这个工作的一个jsfiddle: https://jsfiddle.net/e5mtpboy/
CookiesEnabled: function(flag, bypassTest) {
var cookieEnabled = typeof(flag) === 'boolean' ? flag : navigator.cookieEnabled;
if (!cookieEnabled && !bypassTest) {
document.cookie = "test_cookie";
cookieEnabled = document.cookie.indexOf("test_cookie") != -1;
}
return cookieEnabled;
}
然后在你的测试中:
QUnit.test("CookiesEnabled - returns true if user has enabled cookies in their browser", function (assert) {
var result = CookieHelper.CookiesEnabled(true);
assert.equal(result, true);
});
QUnit.test("CookiesEnabled - returns true if user has disabled cookies, but we can still set one", function (assert) {
var result = CookieHelper.CookiesEnabled(false);
assert.equal(result, true);
});
QUnit.test("CookiesEnabled - returns false if browser does not support cookies", function (assert) {
var result = CookieHelper.CookiesEnabled(false, true);
assert.equal(result, false);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.