首页 > 解决方案 > 如何在测试服务层事务代码时将 jest.spyOn 与 NestJS 一起使用

问题描述

我正在编写单元测试用例来测试我的一种服务方法,该方法上传文件并使用 queryRunner 但模拟无法正常工作

let service = module.get<MemberService>(MemberService); //service class
describe('bulk add member',() =>{
    const path = join(__dirname, '../..', 'templates/member.csv'); //it has 4 records
    const buffer = Buffer.from(readFileSync(path).toString());
     it('should return the correct value and type', async () => {
      const queryRunner = connection.createQueryRunner();
      jest.spyOn(queryRunner.manager.getRepository<Member>(Member), 'save');
      const result = await service.bulkAddMemberData(
        {buffer} as any,'','','');
        console.log(result.length)
      expect(result.length).toEqual(4);
    });

    it('should throw an unprocessable entity exception', async () => {
      const queryRunner = connection.createQueryRunner();
      jest.spyOn(queryRunner.manager.getRepository<Member>(Member), 'delete').mockRejectedValue({ message: '' });
      await expect(service.bulkAddMemberData({}as any,'','','')).rejects.toThrow(
          UnprocessableEntityException
       );
    }); 

I get the below error code

    expect(received).rejects.toThrow()

    Received promise resolved instead of rejected
    Resolved to value: []

      95 |       jest.spyOn(queryRunner.manager.getRepository<Member>(Member), 'delete').mockRejectedValue({ message: '' });
    > 96 |       await expect(service.bulkAddMemberData({}as any,'','','')).rejects.toThrow(
         |             ^
      97 |           UnprocessableEntityException
      98 |        );
      99 |     });

      at expect (../node_modules/expect/build/index.js:134:15)
      at Object.<anonymous> (modules/members/member.service.test.ts:96:13)

在上面的代码中 jest.spyOn 不能正常工作

标签: unit-testingjestjsnestjs

解决方案


推荐阅读