Angular2 RC.1 - 将路由器注入单元测试 [英] Angular2 RC.1 - Inject Router into unit test
问题描述
我正在编写我的ng2测试,并且在将路由器注入我的组件以进行测试时遇到了一些麻烦。我的组件的构造函数只接受一个参数 - 私有路由器:路由器
。
I'm writing my ng2 tests, and I'm running into some trouble injecting Router into my component for my test. The constructor for my component only takes one argument-- private router: Router
.
但是,当我运行我的时候测试用例,我在尝试注入路由器时遇到错误。我究竟做错了什么?任何人都可以提供一个有效的例子吗?
But, when I run my test case, I'm getting an error while it's trying to inject the Router. What am I doing wrong? Can anyone provide a working example?
我正在使用angular2-RC.1
这是我得到的错误:
没有ComponentResolver的提供者! (路由器 - > ComponentResolver)
这是我的测试:
import {describe, it, expect, beforeEach, afterEach, beforeEachProviders, inject} from "@angular/core/testing";
import {ReflectiveInjector, provide} from "@angular/core";
import {HTTP_PROVIDERS} from "@angular/http";
import {Router, ROUTER_PROVIDERS} from "@angular/router";
import {ROUTER_FAKE_PROVIDERS} from "@angular/router/testing";
import {Location} from "@angular/common";
import {SpyLocation} from "@angular/common/testing/location_mock";
import {Observable} from "rxjs/Observable";
import {MyComp} from "./MyComp";
describe("MyComp", () => {
let injector: ReflectiveInjector,
myComp: MyComp,
router: Router;
beforeEach(() => {
injector = ReflectiveInjector.resolveAndCreate([
HTTP_PROVIDERS,
ROUTER_FAKE_PROVIDERS,
provide(Location, {useClass: SpyLocation})
]);
router = injector.get(Router);
myComp = new MyComp(router);
});
afterEach(() => {
injector = null;
myComp = null;
router = null;
});
it("should be defined", () => {
expect(myComp).toBeDefined();
});
});
推荐答案
你需要为路由器创建一个jasmine间谍对象。 AppComponent有一个接收路由器的构造函数。
You need to create a jasmine spy object for the router. AppComponent has a constructor that takes in a Router.
import { AppComponent } from './app.component';
import {Router, ROUTER_PROVIDERS} from "@angular/router";
describe('app component', () => {
let component: AppComponent;
let router: Router;
beforeAll(() => {
router = jasmine.createSpyObj("Router", ['navigate']);
component = new AppComponent(router);
});
it("should be defined", () => {
expect(component).toBeDefined();
});
});
这篇关于Angular2 RC.1 - 将路由器注入单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!