Unit testing Angular2-在部件中测试ngOninit
我有一个清单组件,其代码如下:Unit testing Angular2-在部件中测试ngOninit,unit-testing,angular,angular2-directives,Unit Testing,Angular,Angular2 Directives,我有一个清单组件,其代码如下: ///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> import { Component, OnInit } from 'angular2/core'; import { ROUTER_DIRECTIVES } from 'angular2/router'; import { Employee } from '../models/employee'; impo
///<reference path="../../node_modules/angular2/typings/browser.d.ts"/>
import { Component, OnInit } from 'angular2/core';
import { ROUTER_DIRECTIVES } from 'angular2/router';
import { Employee } from '../models/employee';
import { EmployeeListServiceComponent } from '../services/employee-list-service.component';
@Component({
selector: 'employee-list',
template: `
<ul class="employees">
<li *ngFor="#employee of employees">
<a [routerLink]="['EmployeeDetail', {id: employee.id}]">
<span class="badge">{{employee.id}}</span>
{{employee.name}}
</a>
</li>
</ul>
`,
directives: [ROUTER_DIRECTIVES],
providers: [EmployeeListServiceComponent]
})
export class EmployeeListComponent implements OnInit {
public employees: Employee[];
public errorMessage: string;
constructor(
private _listingService: EmployeeListServiceComponent
){}
ngOnInit() {
this._listingService.getEmployees().subscribe(
employees => this.employees = employees,
error => this.errorMessage = <any>error
);
}
}
但是,测试中的console.log
输出是空的ul
标签,如下所示:
'<employee-list>
<ul class="employees">
<!--template bindings={}-->
</ul>
</employee-list>'
backend.connections.subscribe(
(connection:MockConnection) => {
var options = new ResponseOptions({
body: [
{
"id": 1,
"name": "Abhinav Mishra"
}
]
});
var response = new Response(options);
connection.mockRespond(response);
}
);
Failed: EXCEPTION: Component "EmployeeListComponent" has no route config. in [['EmployeeDetail', {id: employee.id}] in EmployeeListComponent@3:7]
ORIGINAL EXCEPTION: Component "EmployeeListComponent" has no route config.
ORIGINAL STACKTRACE:
Error: Component "EmployeeListComponent" has no route config.
但是,现在我得到另一个错误,如下所示:
'<employee-list>
<ul class="employees">
<!--template bindings={}-->
</ul>
</employee-list>'
backend.connections.subscribe(
(connection:MockConnection) => {
var options = new ResponseOptions({
body: [
{
"id": 1,
"name": "Abhinav Mishra"
}
]
});
var response = new Response(options);
connection.mockRespond(response);
}
);
Failed: EXCEPTION: Component "EmployeeListComponent" has no route config. in [['EmployeeDetail', {id: employee.id}] in EmployeeListComponent@3:7]
ORIGINAL EXCEPTION: Component "EmployeeListComponent" has no route config.
ORIGINAL STACKTRACE:
Error: Component "EmployeeListComponent" has no route config.
如果在
ngOnInit()
中调用异步代码,则不能假定在执行console.log(…)
时异步代码已完成this.employees
仅在响应到达后调用传递给subscribe(…)
的回调时设置
如果使用,则可以控制响应,并且在响应传递后,必须再次运行fixture.detectChanges()
以使用更新的数据重新呈现组件,然后可以读取innerHTML
,并期望它包含呈现的内容