在Jest的模拟函数上使用`new`

时间:2017-07-19 16:09:39

标签: javascript unit-testing mocking jest

我在对模拟函数使用new时试图模拟返回值:

const myMock = jest.fn();
myMock.mockReturnValueOnce('some_string');
const result = new myMock();

问题是new myMock()返回{}(空对象)而不是我指定的返回值。

我查看了文档,但无法找到不同的功能。当与new一起使用时,我可以使用不同的函数来生成结果吗?

1 个答案:

答案 0 :(得分:0)

似乎没有办法直接使用Jest API模拟new myMock()的结果。

相反,我最终做的是将它包装在一个函数中并传递它的参数。我还必须确保结果值是一个对象(这是一个JavaScript的东西)。

它最终是这样的:

const mockedValue = { d: 'DUMMY' };
const mock = jest.fn().mockReturnValueOnce(mockedValue);
const myMock = (a, b) => mock(a, b); // a, b are parameters. Use more or less as needed
const result = new myMock(); // { d: 'DUMMY' }

包装器函数只是一个普通函数,但是当用new调用它时,我能够将mock的结果作为新值返回。我传递了所使用的参数,以确保.toBeCalledWith()的检查按预期工作。