Невозможно выполнить угловое модульное тестирование из-за вызова метода, присутствующего внутри конструктора
Невозможно выполнить угловое модульное тестирование из-за метода, присутствующего внутри конструктора компонента.
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() также работала вместе с этим методом, поскольку он присутствовал внутри конструктора. Можно ли выполнить testMethodNonc () в одиночку, насмехаясь над функцией testMethod?
1 ответ
Так как вы создаете новый экземпляр класса, он будет продолжать вызывать testMethod
, Вы можете шпионить за testMethod
и callFake вместо вызова метода. Вы также можете использовать beforeAll
вместо beforeEach
поэтому компонент создается только один раз для теста. Таким образом, метод будет вызываться только при создании компонента.
После того, как ваш компонент создан, вы можете вызвать любой понравившийся метод и протестировать их по отдельности.