angular 2.0.0-rc.1 + karma:提供 RouteSegment [英] angular 2.0.0-rc.1 + karma: provide RouteSegment
问题描述
当一个组件注入了RouteSegment时,仅仅在测试中提供RouteSegment是不够的:
When a component is injected with RouteSegment, just providing the RouteSegment in the test is not enough:
component.ts:
component.ts:
export class ComponentToTest {
private param: string;
constructor(routeSegment: RouteSegment) {
this.param = routeSegment.getParam('param');
this.getData();
}
}
component.spec.ts:
component.spec.ts:
import {Router, RouteSegment} from '@angular/router';
import {it, inject, beforeEachProviders} from '@angular/core/testing';
import {ROUTER_FAKE_PROVIDERS} from '@angular/router/testing';
import {ComponentToTest} from './component';
describe('ComponentToTest', () => {
beforeEachProviders(() => [
ROUTER_FAKE_PROVIDERS,
RouteSegment,
ComponentToTest
]);
it('should call getData() on contruct', inject([Router], (router) => {
spyOn(ComponentToTest.prototype, 'getData');
expect(ComponentToTest.prototype.getData).not.toHaveBeenCalled();
let component = new ComponentToTest(router);
expect(ComponentToTest.prototype.getData).toHaveBeenCalled();
}));
});
会出现以下错误:
错误:无法解析 'RouteSegment'(?, ?, ?, ?,?).确保所有参数都用 Inject 或具有有效的类型注释并且RouteSegment"装饰有可注射.
Error: Cannot resolve all parameters for 'RouteSegment'(?, ?, ?, ?, ?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'RouteSegment' is decorated with Injectable.
我不知道如何提供 RouteSegment 参数.
I have no idea on how to provide the RouteSegment parameters.
推荐答案
解决方案 1
对我不起作用,仍然不知道为什么.
Didn't work for me, still not sure why.
RouteSegment 的模拟实现:
A mock implementation of RouteSegment:
class MockRouteSegment implements RouteSegment {
urlSegments: any;
parameters: any;
outlet: string;
_type: any;
_componentFactory: any;
type: any;
stringifiedUrlSegments: string;
constructor(parameters?: { [key: string]: any; }) {
this.parameters = parameters
}
getParam(param: string) {
return this.parameters[param];
}
}
像这样提供它:
provide(RouteSegment, { useValue: new MockRouteSegment({ 'key': 'value' }) })
这篇关于angular 2.0.0-rc.1 + karma:提供 RouteSegment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!