[英]Jasmine Unit Test Abstract class
有沒有辦法為抽象組件創建茉莉花單元測試?
正在做
const fixture = TestBed.createComponent(MyAbstractComponent);
說,“不能將抽象構造函數類型分配給非抽象構造函數類型”
我嘗試了一些搜索,但沒有任何結果。
您可以在測試文件中創建一個從抽象類擴展而來的簡單類(不要忘記模擬抽象方法),而不僅僅是測試其非抽象方法。 假設我們有MyAbstractClass
:
export abstract class MyAbstractClass {
sum(a: number, b: number): number {
return a + b;
}
abstract calc1(): void;
abstract calc2(): void;
}
然后在規范文件中我們可以創建一個新的派生類:
class MyClass extends MyAbstractClass {
// just mock any abstract method
calc1(): void {
return;
}
calc2(): void {
return;
}
}
所以現在我們可以為非抽象方法編寫測試:
describe('MyAbstractClass', () => {
let myClass: MyClass;
beforeEach(() => {
myClass = new MyClass();
});
it('sum two args', () => {
const a = 1, b = 2;
const sum = myClass.sum(a, b);
expect(sum).toBe(3);
});
});
還創建了此測試示例的stackblitz示例。
這是我為測試使用內置抽象類DomSanitizer
的角管SafePipe
DomSanitizer
。
// 1. Import the pipe/component to be tested import { SafePipe } from './safe.pipe'; // 2. Import the abstract class import { DomSanitizer } from '@angular/platform-browser'; // 3. Important step - create a mock class which extends // from the base class imported above and add implement // the mock methods class MockDomSanitizer extends DomSanitizer { sanitize(): string{ return 'ANY'; } bypassSecurityTrustHtml(): string{ return 'ANY' } bypassSecurityTrustStyle(): string{ return 'ANY' } bypassSecurityTrustScript(): string{ return 'ANY' } bypassSecurityTrustUrl(): string{ return 'ANY' } bypassSecurityTrustResourceUrl(): string{ return 'ANY' } } describe('SafePipe', () => { it('should return an HTML string', () => { // 4. create an instance of pipe class and inject the mocked class above let safePipe = new SafePipe(new MockDomSanitizer()); // 5. Add your asserions as ususal expect(safePipe.transform(null, 'html')).toBeTruthy(); expect(safePipe.transform(null, 'style')).toBeTruthy(); expect(safePipe.transform(null, 'script')).toBeTruthy(); expect(safePipe.transform(null, 'url')).toBeTruthy(); expect(safePipe.transform(null, 'resourceUrl')).toBeTruthy(); expect(safePipe.transform(null, 'anything')).toContain('anything'); }); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.