首页
学习
活动
专区
圈层
工具
发布

Jest嘲讽
EN

Stack Overflow用户
提问于 2021-05-12 19:18:04
回答 2查看 8.3K关注 0票数 4

我试图在Jest中模拟Typeorm模块的一个功能,并且我想以尽可能干净的方式来实现它。我所创造的成功之处是:

代码语言:javascript
复制
jest.mock("typeorm", () => ({
    __esModule: true,
    getCustomRepository: jest.fn(),
    PrimaryGeneratedColumn: jest.fn(),
    Column: jest.fn(),
    CreateDateColumn: jest.fn(),
    UpdateDateColumn: jest.fn(),
    Entity: jest.fn(),
    EntityRepository: jest.fn(),
    Repository: jest.fn(),
}));

但是,我只想模拟getCustomReposity,而当我只为该函数保留模拟时:

代码语言:javascript
复制
jest.mock("typeorm", () => ({
    __esModule: true,
    getCustomRepository: jest.fn(),
}));

测试甚至不运行,因为实体和存储库使用来自Typeorm的一些装饰器和类。我还试图为整个模块生成模拟:

代码语言:javascript
复制
jest.mock("typeorm", () => jest.createMockFromModule("typeorm"));

生成的模拟装饰器出现了错误:

代码语言:javascript
复制
TypeError: decorator is not a function
    2 |
    3 | @Entity({ name: "users" })
  > 4 | export class User {

有没有办法用比我更干净的方式创建这样的模拟呢?

EN

回答 2

Stack Overflow用户

发布于 2021-05-15 03:18:14

您的代码需要的不仅仅是您所模仿的内容。

如果你嘲笑

代码语言:javascript
复制
jest.mock("typeorm", () => ({
    __esModule: true,
    getCustomRepository: jest.fn(),
}));

然后在您的代码中,import { Entity} from 'typeorm';,现在Entiry是未定义的。除了getCustomRepository以外,其他属性也是如此。

您可以用第一个解决方案解决这个问题,也可以模拟您想要模拟的内容,并将另一个属性作为实际的逻辑返回。

代码语言:javascript
复制
jest.mock('typeorm', () => {
  const actual = jest.requireActual('typeorm');
  return {
    ...actual,
    getCustomRepository: jest.fn(),
  }
});

或模拟typeorm的所有属性

代码语言:javascript
复制
jest.mock('typeorm');
票数 5
EN

Stack Overflow用户

发布于 2022-02-16 11:57:54

您还可以以这种方式模拟getCustomRepository

代码语言:javascript
复制
import typeorm = require('typeorm');

describe('Your test suit', () => {
  beforeAll(() => {
    typeorm.getCustomRepository = jest.fn().mockReturnValue({
      yourMethod: jest.fn(),
    });
  });

  it('your test case', () => {});
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67509778

复制
相关文章

相似问题

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