Функция имитации проблемы, вызываемая событием с помощью QUnit и Sinon

Моя цель — смоделировать функцию runProcedure и убедиться, что она была вызвана после того, как пользователь щелкнул. Однако тест продолжает давать сбой, хотя ясно видно, что функция runProcedure вызывается, когда пользователь щелкает страницу, и если переменная miniWindowShowing имеет значение false, что происходит при загрузке страницы. Кто-нибудь может объяснить, как использовать QUnit с sinon для достижения этой цели? Ниже приведен код, с которым я работаю.

HTML-страница QUnit

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Function Testing</title>
  <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.12.0.css">
</head>
<body>
  <div id="qunit"></div>
  <div id="qunit-fixture"></div>
  <script src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script>
  <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
  <script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
  <script type="text/javascript" src="http://sinonjs.org/releases/sinon-1.7.3.js"></script>
  <script type="text/javascript" src="http://sinonjs.org/releases/sinon-qunit-0.8.0.js"></script>

  <script type="text/javascript" src="Function Source.js"></script>
  <script type="text/javascript" src="TestSuite.js"></script>
  <script>
    test( "Test Click Calls Function", testClickCallsFunction);
  </script>
</body>
</html>

Тестовый файл JavaScript

// Test that when user clicks on the page, a function is called
function testClickCallsFunction(){

    var event = $.Event("click");   
    var funcSpy = sinon.spy(runProcedure);
    $(document).trigger(event);

    ok(funcSpy.called);
}

Функции JavaScript для тестирования

var miniWindowShowing = false;

$(document).ready(function () {

    $(this).click(function (e) {
        //Ignore input events if the mini window is showing
        if(!miniWindowShowing)
        {
            runProcedure();         
        }
    });

})

function runProcedure() {

}

person FearlessFuture    schedule 13.08.2013    source источник


Ответы (1)


Есть небольшая проблема с вашим способом создания шпиона. sinon.spy(runProcedure) создает нового шпиона с переданной функцией, но не заменяет исходную функцию этим шпионом. Поэтому, когда вы вызываете runProcedure, это все еще исходная функция. Чтобы перезаписать функцию шпионом, вы должны использовать этот синтаксис: sinon.spy(window, 'runProcedure'), который заменит функцию runProcedure в глобальном пространстве имен шпионом.

person Andreas Köberle    schedule 14.08.2013
comment
Спасибо за ответ, но когда я это делаю, я получаю следующую ошибку: Attempted to wrap undefined property function runProcedure(){} as function. var funcSpy = sinon.spy( window, runProcedure) — новая строка; - person FearlessFuture; 14.08.2013
comment
Вы скучаете по '' вокруг runProcedure? или это только в сообщении об ошибке? - person Andreas Köberle; 14.08.2013