繁体   English   中英

测试 function 以检查 Qunit 是否启用了 cookies

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM