给定一个通过 @InjectQueue 装饰器使用队列的 Injectable:
@Injectable()
export class EnqueuerService {
constructor (
@InjectQueue(QUEUE_NAME) private readonly queue: Queue
) {
}
async foo () {
return this.queue.add('job')
}
}
如何测试此服务是否正确调用队列?我可以做基本的脚手架:
describe('EnqueuerService', () => {
let module: TestingModule
let enqueuerService: EnqueuerService
beforeAll(async () => {
module = await Test.createTestingModule({
imports: [EnqueuerModule]
}).compile()
enqueuerService = module.get(EnqueuerService)
// Here I'd usually pull in the dependency to test against:
// queue = module.get(QUEUE_NAME)
//
// (but this doesn't work because queue is using the @InjectQueue decorator)
})
afterAll(async () => await module.close())
describe('#foo', () => {
it('adds a job', async () => {
await enqueuerService.foo()
// Something like this would be nice:
// expect(queue.add).toBeCalledTimes(1)
//
// (but maybe there are alternative ways that are easier?)
})
})
})
我在 Nest DI 容器设置中迷失了方向,但我怀疑有一些聪明的方法可以做到这一点。但是,尽管尝试了数小时,但我无法取得进展,并且文档对我没有帮助。任何人都可以提供解决方案吗?它不必是嘲笑,如果更容易创建一个真正的队列来测试它也很好,我只想按预期验证我的服务排队!任何帮助表示赞赏。