Nest 无法解析 PhotoService 的依赖项(?)
Nest can't resolve dependencies of the PhotoService (?)
我从 Nest.js 开始,但在创建服务后出现错误:
Nest 无法解析 PhotoService 的依赖项 (?)。请验证 [0] 参数在当前上下文中是否可用。
我正在关注数据库示例:https://docs.nestjs.com/techniques/database
在您的 app.module.ts
中从提供者中删除 PhotoService
。
然后在 PhotoModule
中,只需导出 PhotoService
:
@Module({
// ...prev code
exports: [PhotoService],
})
对我有帮助的是在测试中使用 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);
});
});
});
如果对您也有帮助,请告诉我
请从 app.module.ts
中删除任何 providers
和 controllers
。
即使它们是由 CLI 工具添加的。
在 app.module.ts
中,您只能加载 imports
中的其他模块
imports: [
WaterModule,
FireModule,
AirModule,
EarthModule,
]
由每个特定模块明确定义可以使用的 imports
、providers
和 exports
。
在:fire.module.ts
@Module({
imports: [TypeOrmModule.forFeature([FireRepository])],
controllers: [FireController],
providers: [FireService],
exports: [FireService],
})
export class FireModule {}
制作应用程序时遇到同样的问题没有子模块(只是一个应用程序模块)。
我的解决方法是从连接中获取存储库。
import { Injectable } from '@nestjs/common';
import { Repository, Connection } from 'typeorm';
import { AuthorEntity } from '../entities/AuthorEntity';
@Injectable()
export class AuthorsService {
usersRepository: Repository<AuthorEntity>;
constructor(private connection: Connection) {
this.usersRepository = connection.getRepository(AuthorEntity);
}
...
}
我从 Nest.js 开始,但在创建服务后出现错误:
Nest 无法解析 PhotoService 的依赖项 (?)。请验证 [0] 参数在当前上下文中是否可用。
我正在关注数据库示例:https://docs.nestjs.com/techniques/database
在您的 app.module.ts
中从提供者中删除 PhotoService
。
然后在 PhotoModule
中,只需导出 PhotoService
:
@Module({
// ...prev code
exports: [PhotoService],
})
对我有帮助的是在测试中使用 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);
});
});
});
如果对您也有帮助,请告诉我
请从 app.module.ts
中删除任何 providers
和 controllers
。
即使它们是由 CLI 工具添加的。
在 app.module.ts
中,您只能加载 imports
imports: [
WaterModule,
FireModule,
AirModule,
EarthModule,
]
由每个特定模块明确定义可以使用的 imports
、providers
和 exports
。
在:fire.module.ts
@Module({
imports: [TypeOrmModule.forFeature([FireRepository])],
controllers: [FireController],
providers: [FireService],
exports: [FireService],
})
export class FireModule {}
制作应用程序时遇到同样的问题没有子模块(只是一个应用程序模块)。
我的解决方法是从连接中获取存储库。
import { Injectable } from '@nestjs/common';
import { Repository, Connection } from 'typeorm';
import { AuthorEntity } from '../entities/AuthorEntity';
@Injectable()
export class AuthorsService {
usersRepository: Repository<AuthorEntity>;
constructor(private connection: Connection) {
this.usersRepository = connection.getRepository(AuthorEntity);
}
...
}