Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript QUnit/Sinon:测试检查cookie是否已启用的功能_Javascript_Jquery_Unit Testing_Qunit_Sinon - Fatal编程技术网

Javascript QUnit/Sinon:测试检查cookie是否已启用的功能

Javascript QUnit/Sinon:测试检查cookie是否已启用的功能,javascript,jquery,unit-testing,qunit,sinon,Javascript,Jquery,Unit Testing,Qunit,Sinon,我有以下(简化的)javascript模块,它使用jQuery Cookie插件检查Cookie是否已启用。如果禁用Cookie,它会警告用户: var cookiePolicy = (function () { var cookiesEnabled = function () { return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid'; }

我有以下(简化的)javascript模块,它使用jQuery Cookie插件检查Cookie是否已启用。如果禁用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>');
            }
        }
    };
})();

测试失败,因为“cookie已包装”。我假设这是因为我在模拟set和read的$.cookie。在本测试中,如何模拟对$.cookie的调用以进行设置和读取?

您的假设是正确的。根据您使用的Sinon版本,您可以执行以下操作:

// UUT
var foo = {
    bar: function() {}
};

// Test setup
var mock = sinon.mock(foo);
var expectation = mock.expects('bar').twice();
expectation.onFirstCall().stub.calledWithExactly('baz');
expectation.onSecondCall().stub.calledWithExactly('qux');

// Test
foo.bar('baz');
foo.bar('qux');
mock.verify();

顺便说一句,使用Sinon Mock而不使用
.verify()
是很奇怪的。也许存根会更合适?

您是否收到来自QUnit的错误消息?还是只是一次失败的测试?能否将整个输出粘贴为问题的更新?我认为解决方案是正确地检查
cookie
mock是否出现预期的事件,每次模拟
cookie
时,它都会生成一个新对象,但实际上并不检查返回值。
// UUT
var foo = {
    bar: function() {}
};

// Test setup
var mock = sinon.mock(foo);
var expectation = mock.expects('bar').twice();
expectation.onFirstCall().stub.calledWithExactly('baz');
expectation.onSecondCall().stub.calledWithExactly('qux');

// Test
foo.bar('baz');
foo.bar('qux');
mock.verify();