[英]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.