使用 Jest 进行 e2e 测试时,依赖(上游)服务未定义,没有任何有用的错误

问题描述 投票:0回答:1

这是在 NestJs 中,使用 Jest。我正在尝试测试我的控制器,它依赖于我的“主要”服务。我希望在控制器上执行端到端测试。 (澄清一下,我的依赖服务的较小单元测试都工作正常 - 没有问题。)

我的控制器的构造函数和我正在测试的第一个方法如下所示:

export class MyController{
constructor(
private aService: AService,
private bService: BService,
//etc etc multiple such services
) {}

@Post('/login')
async login(@Body() logDto: LogDTO)
{
console.log('aService: ' + this.aService);
console.log('bService: ' + this.bService);
//etc etc
//then the code
}
}

我已经像平常一样设置了测试,繁琐地导入所有内容,模拟存储库等,当我错过一些东西时,我收到一条错误消息,说我错过了导入某些服务等。

我在spec.ts中的第一个测试是:

//controller, aService, bService, etc were all defined in the beforeEach block
it('should be defined', () => {
expect(controller).toBeDefined();
expect(aService).toBeDefined();
expect(bService).toBeDefined();
//etc
}

此测试通过。一切都在我的 spec.ts 中定义得很好。然而,当我尝试运行涉及实际的controller.ts 的测试时,当我尝试从依赖项服务执行方法时,我会收到诸如“无法读取未定义的属性”之类的错误。而且,这些 console.logs 确认依赖服务在实际控制器本身中都是未定义的。

我试图确保我没有错过任何导入,但没有任何实际有用的错误消息,我完全陷入困境。我以前从未使用 Jest 进行过 E2E 测试,所以这对我来说也是全新的领域。

编辑:我还应该提到,如果我启动我的程序并使用 Postman 访问公开的 API,它就会按预期工作。所以,我把测试本身搞砸了。

javascript typescript testing jestjs nestjs
1个回答
0
投票

这种情况通常是由于设置测试环境时配置错误而发生的。您可以做的就是确保环境设置正确。 另一件重要的事情是服务的模拟实现。如果您的服务具有预计在测试期间调用的方法,请确保这些方法存在于您的模拟中,并且设置为返回预期值。

© www.soinside.com 2019 - 2024. All rights reserved.