我尝试将测试添加到我的javascript应用中,使用QUnit和Dexterjs进行模拟功能。在这种情况下,我试图模拟$ .getLocation():
QUnit.test( "testGetUrlVar", function() {
var baseUrl = "http://www.example.com?ip=192.168.0.1";
var fakeLocation = Dexter.fake( document, '$.getLocation', function() {
return baseUrl.slice(baseUrl.indexOf('?') + 1).split('&');;
}),
theUrlVar;
theUrlVar = $.getUrlVar('ip');
equal(theUrlVar,'ip','ip var found');
fakeLocation.restore();
});
但是我收到了这个错误:
testGetUrlVar (1, 0, 1)Rerun443492 ms
Died on test #1 @http://localhost:5985/estante20140819/_design/library/test/urltoolsTests.js:1:1 : Dexter should receive a valid object and method combination in arguments. Ex.: window & "alert".
这是我试图嘲笑的代码:
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = $.getLocation();
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
},
getLocation: function(){
return window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
}
});
更新
我已将错误缩小到dexter.js中的以下代码,错误是因为typeof(obj [method])未定义。
if ( !obj || typeof( obj[ method ] ) !== 'function' ) {
throw 'Dexter should receive a valid object and method combination in arguments. Ex.: window & "alert".';
}
答案 0 :(得分:0)
显然,当Dexter试图模拟该函数时,它未找到$
或$
没有方法getLocation
。
那么,$
来自哪里;它在您调用的范围内是否可见?
对Dexter的调用绝对应该是:
...
Dexter.fake( $, 'getLocation', function() {...});
...
但是你应该确保$
在范围内,$.extend(...)
函数在测试开始之前就已经运行了。