Unit testing Jasmine单元测试抽象类
有没有办法为抽象组件创建jasmine单元测试 做Unit testing Jasmine单元测试抽象类,unit-testing,angular,jasmine,Unit Testing,Angular,Jasmine,有没有办法为抽象组件创建jasmine单元测试 做 const fixture = TestBed.createComponent(MyAbstractComponent); 表示“无法将抽象构造函数类型分配给非抽象构造函数类型” 我试着搜索了一下,但什么也没找到 您可以在测试文件中创建一个简单的类,该类从抽象类扩展而来(不要忘记模拟抽象方法),而不仅仅是测试其非抽象方法。假设我们有MyAbstractClass: export abstract class MyAbstractClass {
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;
}
然后在spec文件中,我们可以创建一个新的派生类:
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);
});
});
还创建了此测试示例的一个示例。以下是我对使用内置抽象类
DomSanitizer
的角度管道SafePipe
所做的测试
//1。导入要测试的管道/零部件
从“/safe.pipe”导入{SafePipe};
// 2. 导入抽象类
从“@angular/platform browser”导入{domsanizer};
// 3. 重要步骤-创建一个可扩展的模拟类
//从上面导入的基类中添加
//模拟方法
类MockDomSanitizer扩展了DomSanitizer{
清理():字符串{
返回“ANY”;
}
bypassSecurityTrustHtml():字符串{
返回“ANY”
}
bypassSecurityTrustStyle():字符串{
返回“ANY”
}
bypassSecurityTrustScript():字符串{
返回“ANY”
}
bypassSecurityTrustUrl():字符串{
返回“ANY”
}
bypassSecurityTrustResourceUrl():字符串{
返回“ANY”
}
}
描述('SafePipe',()=>{
它('应该返回一个HTML字符串',()=>{
//4.创建pipe类的实例并在上面注入模拟类
设safePipe=new safePipe(new mockdomsanizer());
//5.将您的资产添加为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');
});
});代码>为什么?只要用一个空类来扩展它。@DaveNewton-在规范文件中?无论在哪里,我都是矛盾的。如果你在其他地方没有具体的实现,那么是的,在规范中写一个最小的实现。它不适用于angular,我有一个基本的抽象类,其中几乎所有的逻辑和功能都是真实组件编写的,然后我有两个组件,除了不同的html和css之外,没有任何逻辑代码。当我运行测试时,它不会识别基类的代码覆盖率,即使我已经为基类编写了测试。使用你的方法。