【问题标题】:Angular 2 and unit testing with servicesAngular 2 和带有服务的单元测试
【发布时间】:2016-05-12 06:58:39
【问题描述】:

我正在尝试对 Angular 2 服务进行单元测试,但遇到了一些麻烦。

我的班级如下所示:

import { Injectable } from '@angular/core';
import {Http} from '@angular/http';

@Injectable()
export class BoardServiceService {

  private http:Http;

  constructor(http:Http) {
    this.http = http;
  }

  /**
   * Load a list of remote boards
   * @return {object} The HTTP observable
   */
  loadBoards(){
    return this.http.get('http://google.com');
  }

}

我的测试如下所示。我需要测试我是否为第一次测试获得了一个项目的数组:

import {
  beforeEachProviders,
  it,
  describe,
  expect,
  inject
} from '@angular/core/testing';

import {Http, BaseRequestOptions, Response, ResponseOptions} from '@angular/http';
import {MockBackend} from '@angular/http/testing';
import {provide} from '@angular/core';
import { BoardServiceService } from './board-service.service';

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


  beforeEachProviders(() => [
    BaseRequestOptions,
    MockBackend,
    Response,
    BoardServiceService,
    provide(Http, {
      useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
      deps: [MockBackend, BaseRequestOptions]
    })
  ]);

  it('should get me a list of items (array type) on subscribe',
    inject([BoardServiceService, MockBackend], (service: BoardServiceService, MockBackend) => {

      const resultSet = [{}];
      const response = new Response(new ResponseOptions({body:resultSet, status:200}));
      MockBackend.connections.subscribe(connection => connection.mockRespond(response));

      BoardServiceService.loadBoards().subscribe(res => expect(res.length).toEqual(1));
    }));
});

当我尝试使用 angular cli (ng test) 运行测试时,出现以下错误:

Broccoli 插件:[BroccoliTypeScriptCompiler] 失败:错误: Typescript 发现以下错误:
C:/Project/angular2/kanboard/tmp/broccoli_type_script_compiler-input_base_path-NaWokBRS.tmp/0/src/app/service/boardService/board-service.service.spec.ts (35, 27): 类型 'typeof 上不存在属性 'loadBoards' BoardServiceService'。

有人知道如何让它工作吗?

【问题讨论】:

    标签: javascript unit-testing typescript angular


    【解决方案1】:

    我认为您应该使用以下内容:

    service.loadBoards().subscribe(res => expect(res.length).toEqual(1));
    

    而不是

    BoardServiceService.loadBoards().subscribe(res => expect(res.length).toEqual(1));
    

    注入的实例不是类本身...

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2017-06-03
      • 2017-12-20
      • 1970-01-01
      • 2019-12-19
      • 2019-05-06
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多