【问题标题】:NestJS tests failing: Cannot set property 'email' of undefinedNestJS 测试失败:无法设置未定义的属性“电子邮件”
【发布时间】:2020-06-24 01:42:29
【问题描述】:

我在 NestJS 应用程序的测试文件中看到一个奇怪的错误。我似乎无法弄清楚,出了什么问题:我有一个 TypeORM 存储库的测试文件:

describe('UserRepository', () => {
    let userRepository;

    beforeEach(async () => {
        const module = await Test.createTestingModule({
          providers: [
            UserRepository,
          ],
        }).compile();
    
        userRepository = await module.get<UserRepository>(UserRepository);
      });

    describe('signUp', () => {
        let save;

        beforeEach(() => {
            save = jest.fn();
            userRepository.create = jest.fn().mockReturnValue({ save });
        });

        it('successfully signs up the user', async () => {
            save.mockResolvedValue(undefined);
            expect(
                userRepository.createUser(mockCredentialsDto),
            ).resolves.not.toThrow();
        });
    });
});

还有一个存储库:

@EntityRepository(User)
export class UserRepository extends Repository<User> {

    async createUser(signUpDto: SignUpDto) {
        const { password, email } = signUpDto;

        const salt = await bcrypt.genSalt();
        const encodedPassword = await bcrypt.hash(password, salt);

        const user: any = this.create();
        user.email = email;
        user.password = encodedPassword;
        user.salt = salt;
        await user.save();

        return user;
    }
}

但是,this.create() 方法似乎不起作用。它似乎返回undefined,最终我的测试出现错误(即使测试都通过了:

收到的promise被拒绝而不是resolved被拒绝的值: [TypeError:无法设置未定义的属性“电子邮件”]

有人可以帮忙吗?我似乎无法弄清楚,为什么 user 未定义。

【问题讨论】:

    标签: nestjs nestjs-testing


    【解决方案1】:

    缺少的是测试的返回语句(!):

    以下是 Jest 文档的摘录:

    “一定要返回断言——如果你省略这个返回语句,你的测试将在从 fetchData 返回的承诺被解析之前完成,然后() 有机会执行回调。”

    这是正确的测试:

    it('throws a conflict exception as username already exists', () => {
       save.mockRejectedValue({ code: '23505' });
       return expect(
           userRepository
                .createUser(mockCredentialsDto),
           ).rejects.toThrow(ConflictException);
    });
    

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2021-10-26
      • 2020-02-21
      • 2020-01-27
      • 2019-04-29
      • 2012-10-18
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      相关资源
      最近更新 更多