Nest无法解析PhotoService的依赖项(?)

Mar*_*ães 4 node.js typescript nestjs

我从Nest.js开始,创建服务后出现错误:

Nest无法解析PhotoService的依赖项(?)。请验证[0]参数在当前上下文中是否可用。

我正在跟踪数据库示例:https : //docs.nestjs.com/techniques/database

这是我的完整代码:https : //github.com/marceloHashzen/nestjsbasics

Vla*_*kov 9

在您从提供者中app.module.ts删除PhotoService。比进PhotoModule,只是出口PhotoService

@Module({
  // ...prev code
  exports: [PhotoService],
})
Run Code Online (Sandbox Code Playgroud)


Ped*_*Luz 7

请从 中删除任何providers和。即使它们是由 CLI 工具添加的。controllersapp.module.ts

app.module.ts你应该只加载其他模块imports

imports: [
  WaterModule,
  FireModule,
  AirModule,
  EarthModule,
]
Run Code Online (Sandbox Code Playgroud)

是由每个具体模块来明确定义什么importsproviders以及exports可以使用什么。

在:fire.module.ts

@Module({
  imports: [TypeOrmModule.forFeature([FireRepository])],
  controllers: [FireController],
  providers: [FireService],
  exports: [FireService],
})
export class FireModule {}
Run Code Online (Sandbox Code Playgroud)


Mic*_*lko 5

对我有帮助的是在测试中使用 PhotoService 的模拟。文档很有帮助https://docs.nestjs.com/fundamentals/custom-providers

或者看看我写的测试规范。

import { Test, TestingModule } from '@nestjs/testing';
import { PhotoController } from './photo.controller';
import { PhotoService } from './photo.service';

describe('PhotoController', () => {
  let module: TestingModule;
  let photoController: PhotoController;
  let photoService: PhotoService;

  const resultAll = ['test'];

  const mockPhotoService = {
    findAll: () => (resultAll),
  };

  const photoServiceProvider = {
    provide: PhotoService,
    useValue: mockPhotoService,
  };

  beforeAll(async () => {
    module = await Test.createTestingModule({
      controllers: [PhotoController],
      providers: [photoServiceProvider],
    }).compile();

    photoService = module.get<PhotoService>(PhotoService);
    photoController = module.get<PhotoController>(PhotoController);
  });

  describe('findAll', () => {
    it('should return collection of photos', async () => {
      jest.spyOn(photoService, 'findAll').mockImplementation(() => resultAll);

      expect(await photoController.findAll()).toBe(resultAll);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

让我知道它是否也对您有帮助