Jest.js 使用HttpModule的单元测试服务

rfbsl7qr  于 9个月前  发布在  Jest
关注(0)|答案(1)|浏览(152)

我正在对我的服务进行一些单元测试,到目前为止还不错,但我遇到了一个使用HttpModule的服务的问题。我的真实的模块从@nestjs/axios包导入HttpModule,以便我的服务可以使用Httpservice进行调用。
我的测试模拟模块,我尝试将HttpService放入providers数组中:

export const franceCasseMockModule = {
  controllers: [FranceCasseController],
  providers: [
    {
      provide: AmqpConnection,
      useValue: jest.fn(),
    },
    {
      provide: FtpService,
      useValue: jest.fn(),
    },
    HttpService,
   ...others services

字符串
在运行测试时,我遇到了这样的错误:在RootTestModule中检测到循环依赖。请确保双向关系的每一端都用“forwardRef()"修饰。
我已经尝试使用madge包来检查循环依赖,但这个没有出现。如果我从我的真实的服务中删除http调用,这样我就不必在我的mock模块的提供程序中添加HttpService,它可以正常工作。如果我尝试像对FtpService那样模拟HttpService,我会出现以下错误:
Nest无法解析FranceCasseService的依赖项。请确保索引[1]处的参数依赖项在RootTestModule上下文中可用。(这是HttpService)如果我尝试导入HttpModule(在单元测试时发现这被认为是一种不好的做法,但对结果很好奇),我会遇到以下错误:
Nest无法创建RootTestModule示例。RootTestModule“imports”数组的索引[0]处的模块未定义。
我没有办法在这里尝试,如果有人能带来一些光在这方面,这将是可怕的。

dxpyg8gm

dxpyg8gm1#

作为遇到同样问题的人,我找到了解决问题的解决方案。以下是解决问题的步骤:

1.更新包

确保你已经更新了相关的包。在我的例子中,nestjs/axios包使用axios作为一个更高版本的对等依赖,jest runner也在最新版本上。


的数据

2.检查Jest配置

检查您的Jest配置(jest.config.cjs)以验证您没有使用Axios客户端的CommonJS(cjs)版本。如果存在,请删除与cjs版本相关的任何内容。



对于那些想知道这种代码起源的人,我在我们的代码库中找到了一个可能启发这个解决方案的线程。

3.不要在HttpService provider部分指定HttpModule

确保你不会在你的app模块声明中指定HttpService。确保你在你的imports部分中只从@nestjs/axios指定HttpModule,这样HttpService就可以注入到你的服务中。
通过以下步骤,应该可以解决与“无法在具有axios的模块外部使用import语句”相关的问题。如果您有任何问题或面临进一步的问题,请随时询问。

相关问题