I can't find the way to mock object import when testing my ReactJs helper. All examples out there showing how to mock imported functions and nobody speak about mocking imported objects.
This base helper object I want to mock:
filters-state.helper.ts
:
export const FiltersStateHelper = {
toggleFilters: <T extends FiltersState>(state: T): T => ({
...state,
isOpen: !state.isOpen
})
};
I am using it in the state helper I'm testing:
search-view-state.helper.ts
:
import { FiltersStateHelper } from 'shared/filters/helpers/filters-state.helper';
export const SearchViewStateHelper = {
toggleFilters: <T extends SearchViewState>(state: T): T => ({
...state,
filters: FiltersStateHelper.toggleFilters(state.filters)
})
//... more methods
};
And in the test mocking dependency is failing, probably because my helper's dependencies already resolved before I said jest what to mock:
search-view-state.helper.spec.ts
:
import { SearchViewStateHelper as helper } from 'shared/search-view/helpers/search-view-state.helper';
describe('toggleFilters method', () => {
const spy = jest.fn();
jest.doMock('shared/filters/helpers/filters-state.helper', () => {
return {
toggleFilters: spy
};
});
const state = {};
it('should toggle filters', () => {
helper.toggleFilters(state);
expect(spy).toHaveBeenCalled();
});
});
You can use jest.spyOn(object, methodName, accessType?) to spy on the toggleFilters
method of FiltersStateHelper
object.
Eg
filters-state.helper.ts
:
type FiltersState = any;
export const FiltersStateHelper = {
toggleFilters: <T extends FiltersState>(state: T): T => ({
...state,
isOpen: !state.isOpen
})
};
search-view-state.helper.ts
:
import { FiltersStateHelper } from './filters-state.helper';
type SearchViewState = any;
export const SearchViewStateHelper = {
toggleFilters: <T extends SearchViewState>(state: T): T => ({
...state,
filters: FiltersStateHelper.toggleFilters(state.filters)
})
// ... more methods
};
search-view-state.helper.spec.ts
:
import { SearchViewStateHelper as helper } from './search-view-state.helper';
import { FiltersStateHelper } from './filters-state.helper';
describe('toggleFilters method', () => {
const state = { filters: { isOpen: false } };
it('should toggle filters', () => {
const spy = jest.spyOn(FiltersStateHelper, 'toggleFilters');
helper.toggleFilters(state);
expect(spy).toHaveBeenCalled();
expect(spy).toBeCalledWith({ isOpen: false });
});
});
Unit test result with 100% coverage:
PASS src/stackoverflow/58746881/search-view-state.helper.spec.ts
toggleFilters method
✓ should toggle filters (6ms)
-----------------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-----------------------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
filters-state.helper.ts | 100 | 100 | 100 | 100 | |
search-view-state.helper.ts | 100 | 100 | 100 | 100 | |
-----------------------------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.833s, estimated 8s
Source code: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58746881
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.