根据Angular2测试文档,为了测试组件,我们应该创建一个这样的对象:
component = fixture.createInstance;
但是对于隔离单元测试,就像服务一样,据说可以创建一个这样的实例:
component = new componentClass(); //traditional way of creating objects by calling class constructor
我不太清楚这两种创建实例的方法之间究竟有什么区别。此外,我已经注意到使用这两者的可访问性差异。有没有人清楚地了解这两者之间的区别?
答案 0 :(得分:0)
隔离测试适用于您只想测试类的内部行为。例如
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');
你不能在孤立的测试中做到这一点。