javascript - 如何使用 Jest 对 typeorm getRepository 进行单元测试?

标签 javascript typescript testing jestjs typeorm

我正在使用带有 typeorm 的 typescript ,我有一个像这样的存储库:

import { EntityRepository, getRepository, createQueryBuilder } from 'typeorm';


@EntityRepository()
export default class Repo {
  async getSomething(): Promise<Result> {
    const schemaQuery = getRepository(SomeModel)
      .createQueryBuilder('sm')
      .select(...)
      .where(...);
      .....

我的测试文件是这样的

import * as typeorm from 'typeorm';
import Repo from '../../../../src/repositories/Repo';

describe(
  'test',
  () => {
    let repo: Repo;
    beforeEach(() => {
      repo = new Repo();
    });
    test('getSomething works', async () => {
      jest.spyOn(typeorm, 'getRepository').mockImplementation(() => ({ // typescript wants me to implement all properties of getRepository which i dont want
        createQueryBuilder: jest.fn(),
      }));
        ...
    });
  },
);

我如何直接从仍符合 typescript 类型检查的 typeorm 模拟 getRepository?

最佳答案

我刚遇到这个问题,实际上我使用了您的代码作为我解决方案的基础。请试试这个:

    jest.spyOn(typeorm, "getRepository").mockImplementation(() => {
      const original = jest.requireActual("typeorm");
     // You need all functions used in your Query builder  
     return {
        ...original,
        createQueryBuilder: jest.fn().mockImplementation(() => ({
          subQuery: jest.fn().mockReturnThis() as unknown,
          from: jest.fn().mockReturnThis() as unknown,
          where: jest.fn().mockReturnThis() as unknown,
          select: jest.fn().mockReturnThis() as unknown,
          getQuery: jest.fn().mockReturnThis() as unknown,
          setParameter: jest.fn().mockReturnThis() as unknown,
          getMany: jest
            .fn()
            .mockResolvedValue(expected) as unknown,
        })),
      };
    });

关于javascript - 如何使用 Jest 对 typeorm getRepository 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67591877/

相关文章:

css - Ionic 4平滑滚动到 anchor

angular - 将节点模块导入 Angular typescript /Angular cli的正确方法是什么

java - AssertJ 断言原因消息

javascript - Ajax 请求 header 保持事件状态

javascript - JavaScript 中检查变量是否仅为整数的最佳方法

javascript - 如何在 typescript 中声明 knockout 组件?

spring-boot - 如何使用 gradle 6+ 和 java 11+ 在 spring boot 中配置 spock

java - 如何在 Netbeans 中调试多个 JUnit 测试套件?

javascript - 通过javascript基于字符串创建svg元素

javascript - 禁用时删除数据切换属性