我正在使用 Typescript 开发一个产品,它通过 npm 使用一些外部包(如果重要的话,用 JS 编写)。在测试中,我只想模拟该包中的一个 JS 文件。
我怎样才能用 Jest 做到这一点?
package.js:
"dependencies": {
...
"@company/product": "1.8.0"
...
someFile.ts:
import * as sdk from "@company/product";
我尝试如下嘲笑它:
someFile.spec.ts:
...
const prefs: IPrefs = {
some_property: -1
};
jest.mock(
"@company/product/sdk/api/prefs.js",
(): { Prefs: IPrefs } => {
return {
Prefs: prefs
};
}
);
外部包中的原始“prefs.js”文件如下所示:
import ... // i can see in the failed test stack trace
export let Prefs = {
...
};
但这显然不是嘲笑,因为我可以看到外部包中原始“prefs.js”的堆栈跟踪。
在
__mocks__
旁边创建一个
node_modules
目录
在
__mocks__
内,复制您正在模拟的包的目录结构。
在
__mocks__/company/product/sdk/api/prefs.js
内,定义函数的模拟实现:
export const someFunction = jest.fn(() => {
// return;
});
在这里,
jest.fn()
创建了一个模拟函数,您可以在测试中控制它。