我在JavaScript文件中有一个方法。Jasmine:测试函数,使用jasmine从不同的函数调用
function foo() {
setTimeout(function() {
bar.getSomeUrl();
},WAIT_FOR_SOMETIME);
}
现在getSomeUrl()
实现如下。
var bar = {
getSomeUrl : function(){
window.location.href = 'someUrl';
return;
},
anotherProp : function() {
return bar.getSomeUrl();
}
};
我试图测试,当我称之为foo()
方法getSomeUrl()
方法将被调用。
我正在使用茉莉花进行测试。我的茉莉花测试如下:
describe('This tests getSomeUrl()', function() {
it('is called when foo() is called', function(){
spyOn(bar,'getSomeUrl').and.callFake(function(){});
window.foo();
expect(bar.getSomeUrl).toHaveBeenCalled();
});
});
我真的不关心什么测试的getSomeUrl()
内部发生的,因为我有一个单独的测试。
我试图测试的是,当我从某处调用我的foo()时,getSomeUrl()
被调用。
我有以下问题:
- 如果我做这样的测试失败,并在运行所有测试结束后,将浏览器重定向到
someUrl
。我没想到会发生这种情况,因为我认为自从我在bar.getSomeUrl()
上有一名间谍,并且正在返回fake method
,所以当我拨打window.foo()
时,实际上并不会调用bar.getSomeUrl()
。 所以我想可能是我应该做的,如下:
预期(window.foo).toHaveBeenCalled();
这没有意义,因为我试图测试bar.getSomeUrl()
被调用。
但是我这样做的时候,测试失败,我得到了以下错误:
Error: Expected a spy, but got Function.
我还以为这可能是setTimeout
功能,导致该问题,改变了foo()
功能:
function foo() {
bar.getSomeUrl();
};
没有任何改变
我一直与茉莉e和Javascript,现在只有几天,并且对事情的工作有广泛的理解。
任何建议,使这个测试通过,也是一个指针,我做错了什么是非常感谢。
它不是java相关的。 JavaScript拼写一个词,并与Java没有任何关系。 –
照顾到了这一点。谢谢。 – ChillBan123
你有一个语法错误。 'bar.getSomeUrl'是一个对象文字(语法无效)。这不是一个功能 – Phil