Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I write test case for a function which uses uuid using jest?

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.

like image 438
Ajay Gaur Avatar asked Dec 07 '22 15:12

Ajay Gaur


2 Answers

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';
like image 196
Azizur Rahman Avatar answered Dec 10 '22 04:12

Azizur Rahman


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.

like image 21
felixmosh Avatar answered Dec 10 '22 05:12

felixmosh