【问题标题】:How can I spy on a function exported from a module in Jasmine 2?如何监视从 Jasmine 2 中的模块导出的函数?
【发布时间】:2018-08-28 16:36:35
【问题描述】:

源代码

  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 一起工作'不清楚这种方法是否可行。

【问题讨论】:

  • 我最终修改了我的代码,以将我的函数作为属性导出一个对象。

标签: jasmine jasmine2.0


【解决方案1】:

如果

spyOn(window, 'lookupFooFunction');

不工作,你可以使用

lookupFooFunction = jasmine.createSpy();

作为创建间谍的替代 Jasmine 语法。 Here's a CodePen 如果 StackOverflow 代码运行程序不工作,可以使用它。

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

【讨论】:

  • 嗯。这对我也不起作用。当我运行您的代码 sn-p 时,我也遇到了错误。另外,我使用的是 Jasmine 2.99。
  • 当我使用 jasmine.createSpy 我得到错误 Uncaught Error: : Expected a spy, but got undefined.
  • 我不确定它没有在 Stack Overflow 上运行是怎么回事。我将框架更改为 2.99.2,它仍然在 Chrome 中为我运行(最新)。我添加了一个 CodePen,以便您可以更轻松地使用它。我还添加了一个假装lookupFooFunction 来模拟您正在导入的那个。
猜你喜欢
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2017-10-22
相关资源
最近更新 更多