假设我在文件中有以下命名导出 customer.ts
export const saveDetails = ()=>{}
export const loadDetails = ()=>{}
Run Code Online (Sandbox Code Playgroud)
假设我在另一个文件中使用它
import {saveDetails, loadDetails} from './customer.ts'
Run Code Online (Sandbox Code Playgroud)
我想用自定义实现来模拟'./customer.ts'。为此,我使用以下代码
const mockSaveDetails = jest.fn().mockImplementation(() => {});
jest.mock('./customer.ts', () => {
return {
saveDetails: mockSaveDetails
};
});
Run Code Online (Sandbox Code Playgroud)
现在,当我运行此代码时,出现以下错误
ReferenceError:初始化前无法访问“mockSaveDetails”
根据https://jestjs.io/docs/en/es6-class-mocks上的文档,我知道模拟被提升到顶部,但如果变量具有前缀mock. 因此,根据文档,这应该可以正常工作吗?如果不是,提供模拟模拟实现并saveDetails使用某些参数监视这些实现(例如查看进行了多少次调用)的替代方法是什么。
这是解决方案:
index.ts:
import { saveDetails, loadDetails } from "./customer";
export function main() {
saveDetails();
loadDetails();
}
Run Code Online (Sandbox Code Playgroud)
customer.ts:
export const saveDetails = () => {
console.log("real save details");
};
export const loadDetails = () => {
console.log("real load details");
};
Run Code Online (Sandbox Code Playgroud)
index.spec.ts:
import { main } from "./";
import { saveDetails, loadDetails } from "./customer";
jest.mock("./customer.ts", () => {
return {
saveDetails: jest.fn(),
loadDetails: jest.fn()
};
});
describe("main", () => {
it("should mock correctly", () => {
main();
expect(saveDetails).toBeCalledTimes(1);
expect(loadDetails).toBeCalledTimes(1);
});
});
Run Code Online (Sandbox Code Playgroud)
100% 覆盖率的单元测试结果:
PASS src/stackoverflow/59024742/index.spec.ts
main
? should mock correctly (5ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 5.626s, estimated 9s
Run Code Online (Sandbox Code Playgroud)
源代码:https : //github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59024742
| 归档时间: |
|
| 查看次数: |
4733 次 |
| 最近记录: |