2014-11-04 3 views
0

У меня есть следующий (упрощенный) модуль javascript, в котором используется плагин jQuery Cookie, чтобы проверить, разрешены ли файлы cookie. Если куки отключены предупреждает пользователя:QUnit/Sinon: тестирование функции, которая проверяет, включены ли файлы 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>'); 
      } 
     } 
    }; 
})(); 

У меня есть следующий тест блок:

QUnit.test("When cookies are enabled the cookie policy text remains unchanged", function (assert) { 
    sinon.mock($).expects("cookie").once().withExactArgs("check", "valid", { expires: 1 }); 
    sinon.mock($).expects("cookie").once().withExactArgs("check").returns("valid"); 

    cookiePolicy.updateCookiePolicy(); 

    assert.equal(0, $('#cookie-warning').length, "Failed!"); 
}); 

Тест терпит неудачу, потому что «куки уже завернуты». Я предполагаю, что это потому, что я издеваюсь над $ .cookie как для набора, так и для чтения. Как я могу высмеять вызов $ .cookie для установки и чтения в этом тесте?

+0

Вы получаете сообщение об ошибке QUnit? Или просто неудачный тест? Можете ли вы вставить весь вывод в качестве обновления к своему вопросу? Я думаю, что решение состоит в том, чтобы правильно проверить «cookie» mock (s) для ожидаемых событий, каждый раз, когда вы издеваетесь над 'cookie', он создает новый объект, но вы фактически не проверяете это возвращаемое значение. – jakerella

ответ

1

Ваше предположение верно. В зависимости от версии Синона вы используете, вы могли бы сделать что-то вроде этого:

Кстати, странно использовать Sinon издевается без использования .verify(). Может быть, заглушки будут лучше подходят?

+0

Спасибо, я получил его работу с заглушками в соответствии с вашим предложением. – ChaoticNadirs

Смежные вопросы