我试图模拟一个提供者的返回值,但由于某种原因,它正在清除模拟值。
Module1.ts
@Module({
providers: [Service1],
exports: [Service1],
})
export class Module1 {}
字符串
服务1.ts
@Injectable({
scope: Scope.REQUEST,
})
export class Service1 {
constructor() {
}
public getVal() {
return '3';
}
}
型
Service2.ts
@Injectable()
export class Service2 {
constructor(private readonly service1: Service1) {}
private someFn() {
this.service1.getVal();
}
}
型
Service2.test.ts
let service1;
let service2;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [Module1],
providers: [Service2],
}).compile();
service2= await module.resolve(Service2);
service1= await module.resolve(Service1);
});
it('some test',()=> {
jest.spyOn(service1,'getVal').mockReturnValue('2'); //This should mock getVal function and return 2.
service2.someFn();
});
型
但是,模拟不会发生。我做错什么了吗?
2条答案
按热度按时间von4xj4u1#
service1.getVal
不可能不被模仿,模仿非常简单。它不影响service2.someFn()
意味着service2
不使用与被模仿的Service1
相同的示例。正如the documentation所说:
请求
为每个传入的请求专门创建提供程序的新示例。在请求完成处理后,对该示例进行垃圾收集。
这意味着
Service1
示例是唯一的。属于Service2
的示例需要被模仿:字符串
doinxwow2#
每次对
resolve
的调用都会为限定作用域的提供程序“创建一个唯一的提供程序示例”。当运行这样的测试时,您需要创建一个contextId,以便所有内容都从同一个DI子树中取出。字符串
https://docs.nestjs.com/fundamentals/module-ref#resolving-scoped-providers