gwg*_*gwg 2 javascript jasmine
我有一些代码:
var bar = function() { ... };
var foo = function() { bar(); };
Run Code Online (Sandbox Code Playgroud)
并进行茉莉花测试:
describe('foo', function() {
it('calls bar', function() {
spyOn(window, 'foo'); // this line causes an error
spyOn(window, 'bar');
foo();
expect(bar).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
注释行导致此错误:
Expected spy bar to have been called.
茉莉花间谍是否会foo
以某种方式杀死其原生实施?如果我删除注释行,则测试通过.
这个特定测试的目的是检查调用是否调用foo()
结果bar()
.为此目的,...
it('calls bar', function() {
spyOn(window, 'bar');
foo();
expect(bar).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
... 足够了.是的,你必须模拟bar
功能,所以它不会完成它的工作,只会报告它的调用.但没有办法,你应该嘲笑foo
与spyOn
你- 测试的功能,而不是模拟!
如果由于某种原因,您应该观察它,请使用andCallThrough
间谍方法:
it('calls bar', function() {
spyOn(window, 'foo').andCallThrough();
spyOn(window, 'bar');
foo();
expect(bar).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
这样仍然可以创建模拟(因此您可以使用它的一些方法 - 例如,检查函数被调用的次数); 区别在于foo
模拟作业结束时调用原始函数.
归档时间: |
|
查看次数: |
600 次 |
最近记录: |