我一直在尝试测试我的代码,但是没有成功。要测试我的代码,我需要模拟一个模块,但是toHaveBeenCalledTimes
的结果为0。
我要测试的代码:
import { createStore } from 'redux';
const store = createStore()
const import = (dispatch) => (
data
) => {
validate(data);
dispatch(someMethod(true))
};
const importer = import(store.dispatch);
export { importer };
我编写的测试:
import { createStore } from 'redux';
jest.mock('redux', () => ({
createStore: jest.fn(() => ({
dispatch: jest.fn()
})),
}));
describe('store module', () => {
let storeImp;
beforeEach(() => {
jest.resetModules();
jest.resetAllMocks();
storeImp = require('./store');
});
it('should create the store', () => {
expect(createStore).toHaveBeenCalledTimes(1);
});
it('should import a valid datastructure', () => {
const dispatchMock = jest.fn();
createStore.mockImplementation(() => ({
dispatch: dispatchMock,
}));
const data = {
something: "data1"
};
storeImp.importer(data);
expect(dispatchMock).toHaveBeenCalledTimes(1);
});
});
我一直坚持下去。我想测试是否已调用createStore和store.dispatch方法。
答案 0 :(得分:0)
这是单元测试解决方案:
store.ts
:
import { createStore } from 'redux';
function reducer(state) {
return state;
}
const store = createStore(reducer);
function validate(data) {
return !!data;
}
function someMethod(flag) {}
const dataImport = (dispatch) => (data) => {
validate(data);
dispatch(someMethod(true));
};
const importer = dataImport(store.dispatch);
export { importer };
store.test.ts
:
import { createStore } from 'redux';
jest.mock('redux', () => {
const mStore = {
dispatch: jest.fn(),
};
return {
createStore: jest.fn(() => mStore),
};
});
describe('store module', () => {
let storeImp;
beforeEach(() => {
storeImp = require('./store');
});
it('should create the store', () => {
expect(createStore).toHaveBeenCalledTimes(1);
});
it('should import a valid datastructure', () => {
const reducer = () => '';
const mStore = createStore(reducer);
const data = {
something: 'data1',
};
storeImp.importer(data);
expect(mStore.dispatch).toHaveBeenCalledTimes(1);
});
});
具有覆盖率报告的单元测试结果:
PASS stackoverflow/61843011/store.test.ts (9.139s)
store module
✓ should create the store (6454ms)
✓ should import a valid datastructure (1ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 90 | 100 | 80 | 88.89 |
store.ts | 90 | 100 | 80 | 88.89 | 4
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 10.457s