[英]Angular 9 TestBed.inject & Provider Overrides
由于 TestBed.get 在 Angular 9 中已被弃用,因此当使用提供程序覆盖时,以下替代方案是什么
TestBed.configureTestingModule({
providers: [{ provide: MyClass, useClass: MyStub}]
});
const obj : MyStub = TestBed.get(MyClass);
真的是这样还是有更好的方法?
const obj : MyStub = TestBed.inject(MyClass) as unknown as MyStub;
出于所有意图和目的,你的MyStub
至少应该是一个 Partial 或一个扩展它试图模拟的类的类,否则你的测试有点“错误”,所以如果是这种情况,你可以这样做:
const obj = TestBed.inject(MyClass);
如果您的存根上不知何故会有不同的属性或不同的函数签名,您也可以这样做:
const obj = TestBed.inject<MyStub>(MyClass as any);
但一般来说,你的模拟应该(部分)与它模拟的东西共享相同的签名,这也意味着不需要强制转换
let valueServiceSpy: jasmine.SpyObj<ValueService>;
beforeEach(() => {
const spy = jasmine.createSpyObj('ValueService', ['getValue']);
TestBed.configureTestingModule({
providers: [
{ provide: ValueService, useValue: spy }
]
});
// This is new way to inject Spied Service
valueServiceSpy = TestBed.inject(ValueService) as jasmine.SpyObj<ValueService>;
});
然后在测试中
it('#getValue should return stubbed value from a spy', () => {
valueServiceSpy.getValue.and.returnValue(yourValue);
...
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.