如何使用 jest 为使用 uuid 的函数编写测试用例?

IT技术 javascript reactjs enzyme jestjs
2021-04-28 22:43:24

我正在使用jest编写测试用例。我的一个函数使用uuid,因此它不是纯函数。代码是这样的:

const myFunc = () => {
    const a = uuid();

    return a;
}

我正在编写我的测试用例:

test('should return a unique id value', () => {
    const a = uuid();
    expect(myFunc()).toEqual(a);
});

显然它不会工作,因为它每次都会生成一个唯一的 ID。如何为此类功能编写测试用例。

[编辑]

我不想测试这个uuid函数,因为它总是会生成一个新的 id,而且它是一个已经在测试中的库函数。我想测试另一个使用uuid、生成新对象并返回该对象的函数这个函数被其他一些函数使用等等,这让我无法测试任何一个,因为初始对象的 id 与我在测试时使用的 id 不同。

2个回答

我发现这真的很好用。

在测试文件的顶部:

// your regular imports here

jest.mock('uuid', () => ({ v4: () => '00000000-0000-0000-0000-000000000000' }));

// describe('test suite here', () => {

在实际代码中:

import { v4 as uuidv4 } from 'uuid';

您可以使用jest.mock以便模拟 的导入uuid,如下所示:

const uuidMock = jest.fn().mockImplementation(() => {
    return 'my-none-unique-uuid';
});
jest.mock('uuid', () => {
    return uuidMock;
});

该方法的唯一警告是您需要在导入真实文件之前在测试文件中应用模拟。

然后你甚至可以在模拟上断言。

有关更多信息,请阅读jest.mock