如何在 Nestjs/TypeORM 应用程序中测试自定义 Repository

时间:2021-05-18 05:01:58

标签: nestjs typeorm

我正在尝试添加更多测试代码以提高示例代码的质量。

目前,我在测试 UserRepository 时遇到问题(不是模拟 UserRepository),我在自定义 UserRepository 中添加了一些这样的自定义方法。

@EntityRepository(UserEntity)
export class UserRepository extends Repository<UserEntity> {
  findByEmail(email: string): Promise<UserEntity> {
    return this.findOne({ email: email });
  }
}

所以我想验证 findOne 是从父 Repository 调用的。

我尝试添加以下测试代码。

describe('UserRepository', () => {
  let local;
  let parentMock;

  beforeEach(() => {
    local = Object.getPrototypeOf(UserRepository);
    parentMock = {
      new: jest.fn(),
      construtor: jest.fn(),
      findOne: jest.fn(),
    };
    Object.setPrototypeOf(UserRepository, parentMock);
  });

  afterEach(() => {
    Object.setPrototypeOf(UserRepository, local);
  });

  it('should call findOne', async () => {
    const findByEmailSpy = jest.spyOn(parentMock, 'findOne');
    const users = new UserRepository();
    await users.findByEmail('test@example.com');
    expect(parentMock.mock.calls.length).toBe(1);
    expect(findByEmailSpy).toBeCalledWith({
      email: 'test@example.com',
    });
  });
});

运行测试时,它抱怨 new UserRepository() 没有构造函数()。

有没有办法解决这个问题,或者有更好的方法来编写这些测试代码?

0 个答案:

没有答案