component = новый componentClass() VS. component = fixture.createInstance: Angular2
Согласно документации по тестированию Angular2, для тестирования компонентов мы должны создать такой объект:
component = fixture.createInstance;
но для модульного тестирования изолятов, например, для сервисов, говорят, что он создает такой экземпляр:
component = new componentClass(); //traditional way of creating objects by calling class constructor
Мне не очень понятно, в чем именно заключается разница между этими двумя подходами к созданию экземпляров. Кроме того, я заметил разницу в доступности, используя оба из них. Кто-нибудь имеет четкое представление о разнице между этими двумя?
1 ответ
Изолированные тесты предназначены для случаев, когда вы хотите проверить только внутреннее поведение класса. Например
class MyComponent {
doSomething(): string {}
}
let component = new MyComponent();
expect(component.doSomething()).toBe('Hello World');
Здесь вы только собираетесь проверить поведение doSomething
метод. Вот и все.
С изолированными тестами вы не можете проверить взаимодействие DOM, так как шаблон никогда не компилируется. Для этого мы должны позволить Angular создать компонент. Затем компонент пройдет через реальный жизненный цикл, в котором он прошел бы, как в реальном приложении.
@Component({
template: `<h1>{{ message }}</h1>
})
class MyComponent {
message = 'Hello World'
}
let fixture = TestBed.createComponent(MyComponent);
fixture.component.message = 'new message';
fixture.detectedChanges();
expect(fixture.debugElement.query(By.css('h1')).nativeElement.textContent)
.toBe('new message');
Вы не могли сделать это в изолированном тесте.