测试功能,用于检查Quit是否启用了Cookie



我有以下功能,可以检查用户浏览器中是否启用了cookie:

CookiesEnabled: function() {
var cookieEnabled = navigator.cookieEnabled;
if (!cookieEnabled) {
document.cookie = "test_cookie";
cookieEnabled = document.cookie.indexOf("test_cookie") != -1;
}
return cookieEnabled;
},

我想使用Sinon/Quit对其进行单元测试,但不确定如何正确处理,因为我对使用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();
});

请有人能为我指出使用Quit和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是只读的。有些东西你可以尝试伪造浏览器,但实际上,你应该注入你感兴趣的属性,让函数使用。通过这种方式,您可以覆盖浏览器设置或对其进行测试!注意添加了两个参数(因为您还需要绕过cookie设置的双重检查(。

附加的flag参数是一个布尔值,本质上"告诉"函数cookieEnabled的值应该是多少(相对于使用navigator.cookieEnabled(。但是,如果该参数丢失,代码将使用浏览器设置。换句话说,这是一种";注入";你想要的值,在测试中非常有用。这并不理想,但如果没有更多的工作和嘲笑(使用禁用cookie的无头浏览器(,你就无法做到这一点。

以下是这项工作的一部分: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);
});

最新更新