我有react模块,它从实用程序中调用函数。我正在测试组件和模拟实用程序功能,但不知何故没有得到它的线路介绍。我嘲笑了实用程序功能以使测试出错,但是它仍然通过了,这使我感到疑惑。
关于如何模拟实用程序功能的任何提示或指南?
//Utils.js
export const add = () => {
return x;
}
add
功能在App模块中使用。我想测试App,但模拟无法返回我期望的返回值。
//Mocking as below
jest.mock('../utils', () => ({
...jest.requireActual('../utils'),
add:() => 4
}));
答案 0 :(得分:0)
您可以使用jest.spyOn
为utils.add
方法创建存根。
例如
App.js
:
import * as utils from './Utils';
export function bootstrap() {
return utils.add();
}
Utils.js
:
export const add = () => {
const x = 1;
return x;
};
App.test.js
:
import { bootstrap } from './App';
import * as utils from './Utils';
describe('bootstrap', () => {
it('should mock utils.add method correctly', () => {
const addStub = jest.spyOn(utils, 'add').mockReturnValueOnce(2);
const actual = bootstrap();
expect(actual).toBe(2);
expect(addStub).toBeCalledTimes(1);
addStub.mockRestore();
});
it('should pass', () => {
expect(utils.add()).toBe(1);
});
});
覆盖率100%的单元测试结果:
PASS src/stackoverflow/59208419/App.test.js (7.993s)
bootstrap
✓ should mock utils.add method correctly (5ms)
✓ should pass (1ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
App.js | 100 | 100 | 100 | 100 | |
Utils.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 9.072s
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59208419