【问题标题】:How to reset dynamic mock in each test?如何在每次测试中重置动态模拟?
【发布时间】:2021-09-06 03:44:49
【问题描述】:

我在模拟我在每个测试中导入的 json:

jest.mock('../assets/items.json', () => items);

所以它看起来像这样:

it('test A',()=>{
    const itemsA=[1,2,3]
    jest.mock('../assets/items.json', () => itemsA);
    const expectedItems = selectQuery('...items')
    expect(expectedItems).toBe(itemsA)
}



 it('test A',()=>{
        const itemsB=[3,4,5]
        jest.mock('../assets/items.json', () => itemsB);
         const expectedItems = selectQuery('...items')
        expect(expectedItems).toBe(itemsB)
 }

问题是当我这样做时,jest.mock() 只模拟 itemsA 而忽略了对 itemsB 的模拟,我尝试这样做:

 beforeEach(() => {
    jest.resetAllMocks();
  
  })

在文件本身我使用这样的东西:

 const items = await import('../assets/items.json');

但它没有帮助,我怎样才能让它工作?

【问题讨论】:

    标签: javascript unit-testing jestjs


    【解决方案1】:

    jest.doMock。具体来说,

    使用 babel-jest 时,对 mock 的调用将自动提升到代码块的顶部。如果您想明确避免这种行为,请使用此方法。

    当你想在同一个文件中以不同的方式模拟一个模块时,这很有用的一个例子:

    我会将您的 jest.mock 呼叫更改为 jest.doMock。还要在每次测试前致电jest.resetModules()

    beforeEach(() => {
      jest.resetModules()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-02
      • 2021-04-25
      • 2018-05-28
      • 1970-01-01
      • 2020-05-26
      • 2019-03-26
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多