我正在使用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不同。
答案 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';