【问题标题】:Trying to return the module import back to its original/default mock尝试将模块导入返回到其原始/默认模拟
【发布时间】:2020-07-24 19:56:44
【问题描述】:

在我的测试文件中,我有一个 mocks 文件夹,其中包含大量导出的函数。通常,我只会使用 mocks 文件夹来完成所有工作,但有一种情况我需要更改返回值以适应另一个功能,我不知道如何获取它回到原始/默认模拟。

以下面的例子为例。

// __mocks__/user.ts
export default someModuleFunction = () => {
  return 'default mock'
}

// user.test.ts
import {someModuleFunction} from 'user';
jest.mock('../users')

describe("TestFile", () => {

 it("should mock the return value in here", () => {
  (someModuleFunction as jest.Mock) = jest.fn().mockReturnValue(null)
  expect(someModuleFunction).toEqual(null)
 })
 
 it("should fallback to the original default mock", async() => {
   expect(someModuleFunction).toEqual('default mock')
 })
})

【问题讨论】:

    标签: typescript unit-testing mocking jestjs


    【解决方案1】:

    分配给someModuleFunction 是一个错误,因为 ES 模块是只读的,这只是因为它们被转译为 CommonJS。应该恢复的模拟永远不应该通过重新分配来完成。更好但仍然不正确的方法是导入* 并在其上使用spyOn

    隔离模块就是这种情况,每次测试都需要重新导入一个模块:

     it("should mock the return value in here", () => {
      jest.isolatedModules(() => {
        jest.doMock('user', () => /* mock it */);
        const {someModuleFunction} = require('user'); // mocked
        /* require modules that depend on this mock */
      });
     })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2010-11-11
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多