Jquery 使用QUnit和Sinon发出由事件调用的模拟函数

Jquery 使用QUnit和Sinon发出由事件调用的模拟函数,jquery,mocking,qunit,sinon,Jquery,Mocking,Qunit,Sinon,我的目标是模拟runProcedure函数,并检查它是否在用户单击后被调用。但是,即使可以清楚地看到,一旦用户单击页面,并且如果MiniWindowsShowing变量为false,则会调用runProcedure函数,但测试仍会失败,页面加载时就是这样。有人能解释一下如何使用QUnit和sinon来实现这个目标吗?下面是我正在使用的代码 QUnit HTML页面 <!DOCTYPE html> <html> <head> <meta charset

我的目标是模拟runProcedure函数,并检查它是否在用户单击后被调用。但是,即使可以清楚地看到,一旦用户单击页面,并且如果MiniWindowsShowing变量为
false
,则会调用runProcedure函数,但测试仍会失败,页面加载时就是这样。有人能解释一下如何使用QUnit和sinon来实现这个目标吗?下面是我正在使用的代码

QUnit HTML页面

<!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函数

var miniWindowShowing = false;

$(document).ready(function () {

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

})

function runProcedure() {

}

你创造间谍的方式有一个小问题
sinon.spy(runProcedure)
使用传递的函数创建一个新的spy,但它不会用该spy替换原始函数。因此,当您调用
runProcedure
时,它仍然是原始函数。要用spy覆盖函数,您必须使用以下语法:
sinon.spy(窗口,'runProcedure')
,它将用spy替换全局命名空间中的函数
runProcedure

感谢您的响应,但当我这样做时,我收到以下错误:
试图将未定义的属性函数runProcedure(){}包装为函数
var funcSpy=sinon.spy(窗口,运行过程)
是新行;您是否错过了
运行过程周围的
'
?或者这只是在错误消息中?
var miniWindowShowing = false;

$(document).ready(function () {

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

})

function runProcedure() {

}