gpt4 book ai didi

Angular2 RC.1 - 将路由器注入(inject)单元测试

转载 作者:太空狗 更新时间:2023-10-29 17:30:28 24 4
gpt4 key购买 nike

我正在编写我的 ng2 测试,但在将 Router 注入(inject)我的组件以进行测试时遇到了一些问题。我的组件的构造函数只接受一个参数 -- private router: Router

但是,当我运行我的测试用例时,我在尝试注入(inject)路由器时遇到错误。我究竟做错了什么?谁能提供一个工作示例?

我正在使用 angular2-RC.1

这是我遇到的错误:没有 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 spy 对象。 AppComponent 有一个接受路由器的构造函数。

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 - 将路由器注入(inject)单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com