I'm using jest for writing test cases. One of my function uses uuid and due to which it is not a pure function. The code is something like this:
const myFunc = () => {
const a = uuid();
return a;
}
I'm writing my test case as :
test('should return a unique id value', () => {
const a = uuid();
expect(myFunc()).toEqual(a);
});
Obviously it won't work as it will generate a unique Id every time. How can I write test case for such function.
[EDIT]
I don't want test the uuid
function as it will always generate a new id and it is a library function which is already being tested. I want to test another function which uses uuid
, generates new object and returns that. This function is used by some other function and so on which makes me not able to test any of that because the initial object has an id which is different that the id which I'm using while testing.
I have found this works really nice.
At the top of test file:
// your regular imports here
jest.mock('uuid', () => ({ v4: () => '00000000-0000-0000-0000-000000000000' }));
// describe('test suite here', () => {
in the actual code:
import { v4 as uuidv4 } from 'uuid';
You can use jest.mock
inorder to mock the import of uuid
, like that:
const uuidMock = jest.fn().mockImplementation(() => {
return 'my-none-unique-uuid';
});
jest.mock('uuid', () => {
return uuidMock;
});
The only caveat of that approach is that you need to apply the mock in the test file before you are importing your real file.
Then you will even able to assert on the mock.
For more info read jest.mock.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With