component = new componentClass() VS.组件 = fixture.createInstance: Angular2
component = new componentClass() VS. component = fixture.createInstance: Angular2
根据 Angular2 测试文档,为了测试组件,我们应该像这样创建一个对象:
component = fixture.createInstance;
但是对于隔离单元测试,比如服务,据说要创建一个这样的实例:
component = new componentClass(); //traditional way of creating objects by calling class constructor
我不是很清楚这两种创建实例的方法到底有什么区别。另外,我注意到使用这两种方法的可访问性差异。有谁清楚这两者的区别吗?
隔离测试适用于只想测试 class 的内部行为的情况。例如
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');
您无法在单独的测试中执行此操作。
根据 Angular2 测试文档,为了测试组件,我们应该像这样创建一个对象:
component = fixture.createInstance;
但是对于隔离单元测试,比如服务,据说要创建一个这样的实例:
component = new componentClass(); //traditional way of creating objects by calling class constructor
我不是很清楚这两种创建实例的方法到底有什么区别。另外,我注意到使用这两种方法的可访问性差异。有谁清楚这两者的区别吗?
隔离测试适用于只想测试 class 的内部行为的情况。例如
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');
您无法在单独的测试中执行此操作。