源代码
import lookupFooFunction from '../../utils/sampleJSFile';
function a() {
const a = 'bla';
const b = 'zoo';
lookupFooFunction(a,b)
//more stuff
}
测试代码
spyOn(window, 'lookupFooFunction');
expect(viewInstance.caFormView.lookupStarRewardsPhone).toHaveBeenCalledWith('bla','zoo');
我希望能够监视我对lookupFooFunction的调用并使用toHaveBeenCalledWith,但由于lookupFooFunction不是一个对象,我无法弄清楚如何这样做。
当我执行上述操作时,我收到错误消息错误:: lookupFooFunction()方法不存在。
搜索更多内容,发现窗口对象不起作用,因为我遇到了与此人相同的问题https://groups.google.com/forum/#!topic/jasmine-js/a3gNCMMd3UM但是,我无法使用jasmine.createSpy工作。我不清楚这种方法是否有用。
答案 0 :(得分:0)
如果
spyOn(window, 'lookupFooFunction');
无效,您可以使用
lookupFooFunction = jasmine.createSpy();
作为替代Jasmine语法来创建间谍。如果StackOverflow代码运行器不工作,Here's a CodePen可以使用它。
// This will be imported, but is stubbed here
function lookupFooFunction(a, b) {
return 123;
}
function a() {
const a = 'bla';
const b = 'zoo';
lookupFooFunction(a, b);
}
it('test', () => {
// Arrange - spy with jasmine.createSpy() or spyOn(window, 'lookupFooFunction')
lookupFooFunction = jasmine.createSpy();
//spyOn(window, 'lookupFooFunction');
// Act
a();
// Assert
expect(window.lookupFooFunction).toHaveBeenCalledWith('bla', 'zoo');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.99.2/jasmine.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.99.2/jasmine-html.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.99.2/boot.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.99.2/jasmine.min.css" rel="stylesheet"/>