如何使用 Jest 模拟 ES6 单例类?

Adr*_*lli 7 javascript unit-testing ecmascript-6 jestjs es6-class

我有一个像这样的单例类的依赖项:

// dependency.js
class Dependency {
   foo() { ... }
}
export default new Dependency();
Run Code Online (Sandbox Code Playgroud)

我试图用 Jest 来模拟这个类,但由于它是一个单身人士,我不知道如何模拟它。我试过这个:

jest.mock('../Dependency', () => {
  return { foo: jest.fn() };
});
Run Code Online (Sandbox Code Playgroud)

但这没有用。

Pab*_*ION 2

接受jest.mock模块名称而不是类名称。该字符串应该与使用时相同require。假设您dependency.js位于父文件夹中,它应该是这样的:

jest.mock('../dependency', () => {
  return { foo: jest.fn() };
});
Run Code Online (Sandbox Code Playgroud)

但是,这需要'../dependency'模块导出 a foo,如下所示:(请参阅有关模拟的更多详细信息

// dependency.js
// class Dependency {
   foo() { ... }
// }
export {foo};
Run Code Online (Sandbox Code Playgroud)

模拟一个类比较复杂,你可以在这里查看实现