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

时间:2018-03-17 07:40:52

标签: javascript reactjs enzyme jest

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

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

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

uuid

显然它不起作用,因为它每次都会生成一个唯一的ID。如何为这样的函数编写测试用例。

[编辑]

我不想测试uuid函数,因为它总是生成一个新的id,它是一个已经过测试的库函数。我想测试另一个使用.OrderBy(v=>v.VehicleNo).ThenBy(r=>r.RouteId) 的函数,生成新对象并返回它。这个函数被其他一些函数使用等等,这使我无法测试其中任何一个,因为初始对象的id与我在测试时使用的id不同。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

有关详细信息,请阅读jest.mock

答案 1 :(得分:3)

我发现这真的很好。

在测试文件的顶部:

// your regular imports here

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

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

在实际代码中:

import { v4 as uuidv4 } from 'uuid';