0
helpers.ts

export function doThing() { 
// some stuff
}
myClass.ts
___

import { doThing } from './helpers.ts'

class myClass {

function someFunction(firstArg, secondArg) {
  const thing = someThirdThing;
  doThing(firstArg, secondArg, someThirdArg);
 }
}

我试过的

myClass.spec.ts

import * as helpers from './helpers.ts'

describe('someFunction' () => {
 it('calls doThing with the correct parameters', () => {
  spyOn(helpers, 'doThing');
  const myClass = new MyClass();
  
  myClass.someFunction(first, second);

  expect(helpers.doThing).toHaveBeenCalledWith(first, second, someThirdThing);
 }
}
___

当我调试时,我最终得到的是我可以看到我的调试器正在进入实际的方法本身,这很好,因为我希望 jest 调用 spy 的实际实现。但是我得到一个'预期:我的断言,'调用:0'

我已经把自己逼疯了,并认为自己在测试中至少有一半体面。但是对于我的生活来说,当涉及到监视不是通过类注入的导出函数时,我最终感到困惑。

我看过:SpyOn 单独导出 ES6 函数,但据我了解,它没有跟踪,因为我的示例有不同的模块。预先感谢您的善意回应。

4

1 回答 1

0

我认为在像这样测试父函数时最好模拟函数调用:

describe('someFunction' () => {
 it('calls doThing with the correct parameters', () => {
  jest.spyOn(helpers, 'doThing').mockImplementation;
  const myClass = new MyClass();
  
  myClass.someFunction(first, second);

  expect(helpers.doThing).toHaveBeenCalledWith(first, second, someThirdThing);
 }
}

您可以在单独的单元测试 helper.spec.ts 中测试“doThing”功能。

PS。在较新版本的 jest 中,我需要使用 jest.spyOn(class, 'fucntion').mockImplementation。在旧版本中,我使用的是 spyOn(class, 'function').and.stub(); 也许是因为茉莉花的类型。

于 2022-02-12T12:06:17.420 回答