Jquery 使用QUnit和Sinon发出由事件调用的模拟函数
我的目标是模拟runProcedure函数,并检查它是否在用户单击后被调用。但是,即使可以清楚地看到,一旦用户单击页面,并且如果MiniWindowsShowing变量为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
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() {
}