Reputation: 153
I want to have something like this:
mockFunctions.ts
jest.mock('../utils', () => {
return {
getNumbers: () => [1,2,3]
}
})
__tests__/test1.ts
---import from mockFunctions---
...
it('After adding another number array has more elements', () => {
const numbers = <get these numbers using mock function>
expect([...numbers, 11]).toHaveLength(4);
})
__tests__/test2.ts
---import from mockFunctions---
...
it('After removing a number, array has less elements', () => {
const numbers = <get these numbers using mock function>
expect(numbers.filter(x => x>1)).toHaveLength(2);
})
Is it possible to have one file where mocked functions are implemented, and then import them in multiple tests files?
Upvotes: 8
Views: 10500
Reputation: 13078
There are some alternative to accomplish this:
__mocks__
directory inside utils folder. See https://jestjs.io/docs/en/manual-mocksutils/index.js
export const getNumbers= () => [1, 2, 3, 4, 5];
->utils/__mocks__
/index.js
export const getNumbers= () => [3, 4];
jest.config.js
{
"setupFilesAfterEnv": [
"<rootDir>/jestSetup.js"
]
}
jestSetup.js
jest.mock("../utils"); // will apply to all tests
jest.config.js
{
"setupFilesAfterEnv": [
"<rootDir>/jestSetup.js"
]
}
jestSetup.js
jest.mock("../utils", () => ({
getNumbers: () => [3, 4]
}));
or create a file with mocks
mocks.js
jest.mock("../utils", () => ({
getNumbers: () => [3, 4]
}));
jestSetup.js
import './mocks.js'
If you don't want to use mocks on specific test, you can call:
jest.unmock('../utils')
See: https://jestjs.io/docs/en/jest-object#jestunmockmodulename
Upvotes: 13