gpt4 book ai didi

node.js - 如何在 NestJS 中测试具有多个构造函数参数的服务

转载 作者:行者123 更新时间:2023-11-28 20:21:48 24 4
gpt4 key购买 nike

背景

当我测试需要构造函数中的一个参数的服务时,我必须使用对象将服务初始化为提供者,而不是简单地将服务作为提供者传递:

auth.service.ts(示例)

@Injectable()
export class AuthService {

constructor(
@InjectRepository(Admin)
private readonly adminRepository: Repository<Admin>,
) { }

// ...

}

auth.service.spec.ts(示例)

describe('AuthService', () => {
let authService: AuthService


beforeEach(async () => {
const module = await Test.createTestingModule({
providers: [
AuthService,
{
provide: getRepositoryToken(Admin),
useValue: mockRepository,
},
],
}).compile()

authService = module.get<AuthService>(AuthService)
})

// ...

})

参见 this issue on GitHub此解释的来源。


我的问题

我有一个服务在构造函数中需要 2 个参数:

auth.service.ts

@Injectable()
export class AuthService {
constructor(
private readonly jwtService: JwtService,
private readonly authHelper: AuthHelper,
) {}

// ...

}

如何在测试环境中初始化此服务?我无法将多个值传递给 providers 数组中的 useValue。我的 AuthService 构造函数有 2 个参数,我需要同时传递它们才能使测试正常进行。

这是我当前(不工作)的设置:

auth.service.spec.ts

describe('AuthService', () => {
let service: AuthService

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [AuthService],
}).compile()

service = module.get<AuthService>(AuthService)
})

it('should be defined', () => {
expect(service).toBeDefined()
})

// ...

})

当我不传递它们时,会出现以下错误:

  ● AuthService › should be defined

Nest can't resolve dependencies of the AuthService (?, AuthHelper). Please make sure that the argument at index [0] is available in the TestModule context.

最佳答案

只需在 providers 数组中为注入(inject)到您的 AuthService 构造函数中的每个提供者创建一个条目:

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
AuthService,
{provide: JwtService, useValue: jwtServiceMock},
{provide: AuthHelper, useValue: authHelperMock},
],
}).compile()

测试实用程序 Test.createTestingModule() 创建一个模块,就像您的 AppModule 一样,因此也有一个 providers 数组,用于依赖注入(inject)。

关于node.js - 如何在 NestJS 中测试具有多个构造函数参数的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com