dan*_*y74 5 angular2-routing angular2-di angular2-testing angular
我在用RC3.我正在实现Angular2这里记录的新路由器:https://angular.io/docs/ts/latest/guide/router.html
一切正常但我在单元测试中遇到问题.具体来说,我不能将Angular2服务注入我的单元测试中.
我的相关组件代码是:
import {Component} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
@Component({
templateUrl: ...
styleUrls: ...
})
export class Route1DetailComponent {
constructor(private route:ActivatedRoute) {
console.log(route);
}
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试看起来像:
import {
expect, it, iit, xit,
describe, ddescribe, xdescribe,
beforeEach, beforeEachProviders, withProviders,
async, inject
} from '@angular/core/testing';
import {ActivatedRoute} from '@angular/router';
import {Route1DetailComponent} from './route1-detail.component';
import {TestComponentBuilder} from '@angular/compiler/testing';
describe('route1-detail.component.ts', () => {
beforeEachProviders(() => [
{provide: ActivatedRoute, useClass: ActivatedRoute}
]);
it('should instantiate component',
async(inject([TestComponentBuilder, ActivatedRoute], (tcb:TestComponentBuilder, ar: ActivatedRoute) => {
tcb.createAsync(Route1DetailComponent).then((fixture) => {
expect(fixture.componentInstance instanceof Route1DetailComponent).toBe(true, 'should create Route1DetailComponent');
console.log(ar);
});
})));
Run Code Online (Sandbox Code Playgroud)
});
'should instantiate component'单元测试失败.错误是:
无法解析'ActivatedRoute'的所有参数(?,?,?,?,?).确保所有参数都使用Inject进行修饰或具有有效的类型注释,并且'ActivatedRoute'使用Injectable进行修饰.
我该如何工作?
当我不注射ActivatedRoute一切正常.
谢谢.
在单元测试时,有时某个服务会因为没有在正常环境中使用而导致问题.您可以测试是否已调用它,而无需通过整个服务运行单元测试.通过创建一个模拟类来做到这一点.
describe('route1-detail.component.ts', () => {
class MockActivatedRoute {}
beforeEachProviders(() => [
{provide: ActivatedRoute, useClass: MockActivatedRoute}
]);
it('should instantiate component',
async(inject([TestComponentBuilder, ActivatedRoute], (tcb:TestComponentBuilder, ar: MockActivatedRoute) => {
tcb.createAsync(Route1DetailComponent).then((fixture) => {
expect(fixture.componentInstance instanceof Route1DetailComponent).toBe(true, 'should create Route1DetailComponent');
console.log(ar);
});
})));
Run Code Online (Sandbox Code Playgroud)
注意这部分:inject([TestComponentBuilder, ActivatedRoute], (tcb:TestComponentBuilder, ar: MockActivatedRoute.当代码正在寻找ActivatedRoute时,您将传递模拟服务.当然,如果您专门尝试对ActivatedRoute本身进行单元测试,那么创建模拟服务就会失败.如果尝试从该服务调用方法,则可能必须向mock类添加方法或变量.
| 归档时间: |
|
| 查看次数: |
2848 次 |
| 最近记录: |