component = new componentClass()VS. component = fixture.createInstance:Angular2

时间:2016-10-28 02:34:52

标签: angular angular2-testing

根据Angular2测试文档,为了测试组件,我们应该创建一个这样的对象:

component = fixture.createInstance;

但是对于隔离单元测试,就像服务一样,据说可以创建一个这样的实例:

component = new componentClass(); //traditional way of creating objects by calling class constructor

我不太清楚这两种创建实例的方法之间究竟有什么区别。此外,我已经注意到使用这两者的可访问性差异。有没有人清楚地了解这两者之间的区别?

1 个答案:

答案 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');

你不能在孤立的测试中做到这一点。