Enm*_*ran 9 javascript dynamic-import jestjs
所以我一直在努力如何测试动态导入,在这种情况下,特别是在开玩笑,我在互联网上阅读了很多,但没有找到任何具体的东西,所以我考虑提出这个问题以集中一个体面的解决方案.
我在一个类中有以下方法
class MyClass {
successMethod() { ... }
errorMethod() { ... }
myMethod() {
return import('./myFile.js')
.then(() => this.successMethod())
.catch(() => this.errorMethod());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
您如何使用 Jest 模拟此动态导入的 Success 和 Failing 承诺案例,以确保分别在解决或失败时调用每个方法(successMethod和errorMethod)?
我找到jest.doMock了模拟已解决案例的帮助,但没有找到通过模拟来使动态导入失败的方法,以便catch发现案例。
注意:这不是一个 React 应用程序,这是一个 Vanilla JS 项目。
原型方法可以在任何一个MyClass.prototype或类实例上被监视或模拟。应该为每个测试恢复模块模拟和间谍功能,以便它们不会相互影响。
let myClass;
beforeEach(() => {
jest.resetModules();
jest.restoreAllMocks();
myClass = new MyClass();
jest.spyOn(myClass, 'successMethod');
jest.spyOn(myClass, 'errorMethod');
});
Run Code Online (Sandbox Code Playgroud)
jest.doMock要求在调用后导入所有受影响的模块。为了动态import导致被拒绝的承诺,myFile模块在评估时应该抛出一个错误。由于动态import返回一个承诺,测试应该是异步的。
it('...', async () => {
jest.mock('./myFile.js', () => 'value');
await expect(myClass.myMethod()).resolves.toEqual(/* return value from successMethod */);
expect(myClass.successMethod).toBeCalled();
expect(myClass.errorMethod).not.toBeCalled();
});
it('...', async () => {
jest.mock('./myFile.js', () => { throw new Error() });
await expect(myClass.myMethod()).rejects.toThrow(/* error message from errorMethod */);
expect(myClass.successMethod).not.toBeCalled();
expect(myClass.errorMethod).toBeCalled();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |