Javascript 开玩笑+;React测试库:如何模拟某个库中只影响一个测试块的方法
使用Jest模拟来自第三方库的方法的问题。所以我有一个这样实现的组件Javascript 开玩笑+;React测试库:如何模拟某个库中只影响一个测试块的方法,javascript,reactjs,unit-testing,jestjs,react-testing-library,Javascript,Reactjs,Unit Testing,Jestjs,React Testing Library,使用Jest模拟来自第三方库的方法的问题。所以我有一个这样实现的组件 从'bar'导入{foo} 函数组件(){ //在组件中的某个地方使用foo } 在测试中,我试图模仿foo,所以 从'bar'导入{foo} 开玩笑的模仿(“酒吧”) 测试('test',()=>{ foo.mockReturnValue(…) }) 这很好,但一旦我将jest.mock('bar')移动到每个test块中,jest就会报告一个错误,说foo.mockReturnValue不是函数。像这样 test('t
从'bar'导入{foo}
函数组件(){
//在组件中的某个地方使用foo
}
在测试中,我试图模仿foo,所以
从'bar'导入{foo}
开玩笑的模仿(“酒吧”)
测试('test',()=>{
foo.mockReturnValue(…)
})
这很好,但一旦我将jest.mock('bar')
移动到每个test
块中,jest就会报告一个错误,说foo.mockReturnValue
不是函数。像这样
test('test',()=>{
开玩笑的模仿(“酒吧”)
foo.mockReturnValue(…)/因为您希望在每个测试级别模拟foo
,所以在每个测试运行之前或之后,保持bar
全局模拟并使用beforeach()
或afterEach()
重置模拟函数更有意义
import {foo} from 'bar';
jest.mock('bar');
afterEach(() => {
foo.mockReset();
})
test('test', () => {
foo.mockReturnValue(...);
})
您需要使用.mockReset()
从foo
中删除模拟实现和返回值;或者,如果foo
的实现和返回值在每个测试中保持不变,则可以使用.mockClear()
。请阅读有关差异的更多信息