首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用"doMock“以避免提升时,不要嘲笑模块

在使用"doMock“以避免提升时,不要嘲笑模块
EN

Stack Overflow用户
提问于 2019-04-03 15:56:05
回答 1查看 3.5K关注 0票数 2

我试图模拟一个创建并返回另一个类的类。我有这个:

代码语言:javascript
复制
const mockMethod = jest.fn();

const mockClassA = jest.fn<ClassA>(() => ({
  method: mockMethod
}));

jest.mock("../src/ClassB", () => ({
  ClassB: {
    getClassA: () => new mockClassA()
  }
}));

由于提升,当jest嘲笑`../src/ClassB“时,mockClassA未定义。

如果您不想提升,我已经读过了,只需使用doMock

当使用babel-jest时,对模拟的调用将自动挂起到代码块的顶部。如果要显式地避免此行为,请使用此方法。

https://jestjs.io/docs/en/next/jest-object#jestdomockmodulename-factory-options

当我使用mock运行时,我得到了TypeError: mockClassA is not a constructor,因为mockClassA是未定义的,因为mock被悬挂在mockClassA的定义之上。

当我将mock更改为doMock时,它根本不模拟模块--它使用的是真实的模块。

编辑:在线解说它们意味着我不能很容易地访问被模仿的检查方法:

代码语言:javascript
复制
jest.mock("../src/ClassB", () => ({
  ClassB: {
    getClassA: () => ({
      method: jest.fn()
    })
  }
}));

因为getClassA是一个函数,所以它用method返回对象的单独实例。

编辑2:啊!设法将其内联如下:

代码语言:javascript
复制
jest.mock("../src/ClassB", () => {
  const mockMethod: jest.fn();
  return {
    ClassB: {
      getClassA: () => ({
        method: mockMethod
      })
    }
  };
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 16:03:19

我想你在这里有两个选择:

  1. 使用jest.mock,内联mockClassAmockMethod,在模拟中公开它们,然后从‘./src/ClassB’导入
  2. 使用doMock,但在测试用例中使用动态require
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55499409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档