【发布时间】:2021-08-07 08:06:36
【问题描述】:
我正在尝试添加更多测试代码以提高示例代码的质量。
目前,我在测试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() 没有constructor()。
有没有办法解决这个问题,或者有更好的方法来编写这些测试代码?
【问题讨论】: