我正在开发一个使用依赖注入的应用程序tsyringe
。这是将存储库作为依赖项接收的服务示例:
import { injectable, inject } from 'tsyringe'
import IAuthorsRepository from '@domains/authors/interfaces/IAuthorsRepository'
@injectable()
export default class ListAuthorsService {
constructor (
@inject('AuthorsRepository')
private authorsRepository: IAuthorsRepository
) {}
和依赖容器:
import { container } from 'tsyringe'
import IAuthorsRepository from '@domains/authors/interfaces/IAuthorsRepository'
import AuthorsRepository from '@domains/authors/infra/typeorm/repositories/AuthorsRepository'
container.registerSingleton<IAuthorsRepository>(
'AuthorsRepository',
AuthorsRepository
)
export default container
在测试中,我不想使用在容器上注册的依赖项,而是通过参数传递一个模拟实例。
let authorsRepository: AuthorsRepositoryMock
let listAuthorsService: ListAuthorsService
describe('List Authors', () => {
beforeEach(() => {
authorsRepository = new AuthorsRepositoryMock()
listAuthorsService = new ListAuthorsService(authorsRepository)
})
但我收到以下错误:
tsyringe 需要一个反射 polyfill。请将“import "reflect-metadata"”添加到入口点的顶部。
我的想法是 - “我可能需要在执行测试之前导入反射元数据包”。所以我创建了一个jest.setup.ts
导入reflect-metadata
包的。但是又出现了一个错误:
存储库的实例不知何故未定义。
我想安静地进行测试。