Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何对包含路由器弃用版本的Angular 2.0服务进行单元测试?_Unit Testing_Typescript_Angular_Angular Cli - Fatal编程技术网

Unit testing 如何对包含路由器弃用版本的Angular 2.0服务进行单元测试?

Unit testing 如何对包含路由器弃用版本的Angular 2.0服务进行单元测试?,unit-testing,typescript,angular,angular-cli,Unit Testing,Typescript,Angular,Angular Cli,这有点令人困惑,因为我在Angular 2.0和Router弃用的文档中找不到任何相关内容(是的,我必须在我的项目中仍然使用它) 我的服务如下所示: import { Injectable } from '@angular/core'; import { Http, Headers } from '@angular/http'; import { AuthHttp , JwtHelper } from 'angular2-jwt'; import { Router } from '@angula

这有点令人困惑,因为我在Angular 2.0和Router弃用的文档中找不到任何相关内容(是的,我必须在我的项目中仍然使用它)

我的服务如下所示:

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { AuthHttp , JwtHelper } from 'angular2-jwt';
import { Router } from '@angular/router-deprecated';
import { UMS } from '../common/index';

@Injectable()
export class UserService {

  constructor(
    private router: Router,
    private authHttp: AuthHttp,
    private http: Http) {

      this.router = router;
      this.authHttp = authHttp;
      this.http = http;
    }

    login(v) {
      this.http.post(myUrl)
      .subscribe(
        data => this.loginSuccess(data),
        err => this.loginFailure(err)
      );
    }

}
我的测试是这样的(暂时不关心“it”部分):

当我运行测试时,我得到了这个错误:(顺便说一句,我使用的是angular cli)

错误:无法解析“路由器”(RouterRegistry、Router、Router)的所有参数。确保所有参数都用Inject修饰或具有有效的类型注释,并且“Router”用Injectable修饰


我在这里错了吗?

经过大量的搜索,我发现我错误地注射了提供者

基于此,我将我的服务更改为:

import { Http } from '@angular/http';
import { provide } from '@angular/core';
import { SpyLocation } from '@angular/common/testing';
import { AuthHttp, JwtHelper } from 'angular2-jwt';
import {
  Router, RootRouter, RouteRegistry, ROUTER_PRIMARY_COMPONENT
} from '@angular/router-deprecated';
import {
  beforeEach, beforeEachProviders,
  describe, xdescribe,
  expect, it, xit,
  async, inject
} from '@angular/core/testing';
import { UserService } from './user.service';

describe('User Service', () => {

  let service = UserService.prototype;

  beforeEachProviders(() => [
    RouteRegistry,
    provide(Location, {useClass: SpyLocation}),
    provide(ROUTER_PRIMARY_COMPONENT, {useValue: UserService}),
    provide(Router, {useClass: RootRouter}),
    AuthHttp,
    Http,
    UserService
  ]);

  it('Should have a login method', () => {
      expect(service.login).toBeTruthy();
  });

});
import { Http } from '@angular/http';
import { provide } from '@angular/core';
import { SpyLocation } from '@angular/common/testing';
import { AuthHttp, JwtHelper } from 'angular2-jwt';
import {
  Router, RootRouter, RouteRegistry, ROUTER_PRIMARY_COMPONENT
} from '@angular/router-deprecated';
import {
  beforeEach, beforeEachProviders,
  describe, xdescribe,
  expect, it, xit,
  async, inject
} from '@angular/core/testing';
import { UserService } from './user.service';

describe('User Service', () => {

  let service = UserService.prototype;

  beforeEachProviders(() => [
    RouteRegistry,
    provide(Location, {useClass: SpyLocation}),
    provide(ROUTER_PRIMARY_COMPONENT, {useValue: UserService}),
    provide(Router, {useClass: RootRouter}),
    AuthHttp,
    Http,
    UserService
  ]);

  it('Should have a login method', () => {
      expect(service.login).toBeTruthy();
  });

});