如何监视从Jasmine 2中的模块导出的函数?

时间:2018-03-20 00:17:42

标签: jasmine jasmine2.0

源代码

  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工作。我不清楚这种方法是否有用。

1 个答案:

答案 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"/>