由于构造函数中存在方法调用,无法进行 angular 单元测试
Unable to do angular unit testing due to method call present inside constructor
由于组件构造函数中存在方法,无法 运行 angular 单元测试。
export class AppComponent {
name = 'Angular 4';
constructor(){
this.testMethod();
}
testMethod(){
console.log("test method");
}
testMethodNonc(){
console.log("test method nc");
}
}
//我的规范文件
describe('MyComponent', () => {
let fixture, element;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
]
});
fixture = TestBed.createComponent(AppComponent);
element = fixture.debugElement;
})
it('works', () => {
fixture.detectChanges();
expect(component.testMethodNonc()).toHaveBeenCalled();
});
});
当我尝试 运行 对 testMethodNonc() 进行单元测试时,函数 testMethod() 也 运行 与此方法一起使用,因为它存在于内部构造函数中。是否可以通过模拟函数 testMethod 单独执行 testMethodNonc()?
由于您正在创建 class 的新实例,它将继续调用 testMethod
。您可以监视 testMethod
和 callFake 而不是调用该方法。您也可以使用 beforeAll
而不是 beforeEach
,这样组件只为测试创建一次。这样,该方法只会在创建组件时最初调用。
创建组件后,您可以调用任何您喜欢的方法并单独测试它们。
由于组件构造函数中存在方法,无法 运行 angular 单元测试。
export class AppComponent {
name = 'Angular 4';
constructor(){
this.testMethod();
}
testMethod(){
console.log("test method");
}
testMethodNonc(){
console.log("test method nc");
}
}
//我的规范文件
describe('MyComponent', () => {
let fixture, element;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
]
});
fixture = TestBed.createComponent(AppComponent);
element = fixture.debugElement;
})
it('works', () => {
fixture.detectChanges();
expect(component.testMethodNonc()).toHaveBeenCalled();
});
});
当我尝试 运行 对 testMethodNonc() 进行单元测试时,函数 testMethod() 也 运行 与此方法一起使用,因为它存在于内部构造函数中。是否可以通过模拟函数 testMethod 单独执行 testMethodNonc()?
由于您正在创建 class 的新实例,它将继续调用 testMethod
。您可以监视 testMethod
和 callFake 而不是调用该方法。您也可以使用 beforeAll
而不是 beforeEach
,这样组件只为测试创建一次。这样,该方法只会在创建组件时最初调用。
创建组件后,您可以调用任何您喜欢的方法并单独测试它们。