Jest 中这两种模拟方式有什么区别?

问题描述 投票:0回答:1

我在 React 中有一些自定义钩子。我正在使用单元测试(Jest),我必须模拟这个钩子。

const theHook = () => {

// some code

return {func1, func2};
}

我发现下面两个例子不一样。

import theHook from '../theHook';

jest.mock('../theHook');

theHook.mockReturnValue({
    func1: jest.fn(),
    func2: jest.fn()
});

import theHook from '../theHook';

jest.mock('../theHook', () => ({
    func1: jest.fn(),
    func2: jest.fn()
}));

谁能给我解释一下这两种mock方式的区别?

javascript reactjs unit-testing jestjs mocking
1个回答
0
投票

主要区别:

  • 实现时机:在第一个示例中,您先模拟模块,然后单独设置返回值。在第二个中,您直接在模拟定义中提供返回值。

  • 模拟行为:在第一个示例中,如果您想在初始模拟后进一步自定义行为,您可以这样做,因为模块已被模拟但尚未定义。在第二个示例中,您在模拟后立即有一个固定的返回值。

何时使用每个:

  • 当您想稍后在测试中定义模拟行为时,请使用第一种方法,特别是当您有多个测试可能需要同一钩子的不同返回值时。

  • 对于更简单的情况,使用第二种方法,您希望预先定义模拟行为并且以后不需要更改它。

© www.soinside.com 2019 - 2024. All rights reserved.