检查 Qunit 是否启用 cookie 的测试功能
Testing function which checks if cookies are enabled with Qunit
我有以下功能可以检查用户浏览器中是否启用了 cookie:
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
是只读的。有些东西你可以尝试伪造浏览器,但实际上,你应该只注入你感兴趣的属性以供函数使用。这样您就可以覆盖浏览器设置或对其进行测试!注意添加了两个参数(因为您还需要绕过 double-checking 的 cookie 设置)。
附加的 flag
参数是一个布尔值,它本质上告诉函数 cookieEnabled
的值应该是什么(相对于使用 navigator.cookieEnabled
)。但是,如果缺少该参数,代码将使用浏览器设置。换句话说,这是一种“注入”你想要的值的方法,在测试中非常有用。这并不理想,但如果没有更多的工作和模拟(使用禁用 cookie 的无头浏览器),您将无能为力。
这是这个工作的 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);
});
我有以下功能可以检查用户浏览器中是否启用了 cookie:
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
是只读的。有些东西你可以尝试伪造浏览器,但实际上,你应该只注入你感兴趣的属性以供函数使用。这样您就可以覆盖浏览器设置或对其进行测试!注意添加了两个参数(因为您还需要绕过 double-checking 的 cookie 设置)。
附加的 flag
参数是一个布尔值,它本质上告诉函数 cookieEnabled
的值应该是什么(相对于使用 navigator.cookieEnabled
)。但是,如果缺少该参数,代码将使用浏览器设置。换句话说,这是一种“注入”你想要的值的方法,在测试中非常有用。这并不理想,但如果没有更多的工作和模拟(使用禁用 cookie 的无头浏览器),您将无能为力。
这是这个工作的 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);
});