【问题标题】:Test of a service using ngx-restangular not working使用 ngx-restangular 测试服务不起作用
【发布时间】:2017-12-26 05:02:03
【问题描述】:

我正在使用 ngx-restangular 开发 Angular 5 应用程序。

我创建了一个服务,其中使用 ngx-restangular 进行 http 调用。以下是服务代码-

Project.service.ts

import { Injectable } from '@angular/core';
import { Restangular } from 'ngx-restangular';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class ProjectService {

    constructor(public restangular: Restangular) {}

    restoreProject(project): Observable<any> {
        return this.restangular.one('projects', project.id).get(); 
    }

}

以下是 Jasmine 中对上述服务的测试 -

Project.service.spec.ts

import { TestBed, inject } from '@angular/core/testing';
import { Restangular } from 'ngx-restangular';
import { HttpModule, Http, BaseRequestOptions, XHRBackend } from '@angular/http';
import { MockBackend } from '@angular/http/testing';

import {ProjectService } from './project.service';

describe('ProjectService', () => {
    let service = ' ';

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                ProjectService,
                { provide: XHRBackend, useClass: MockBackend }
            ]
        });
    });

    beforeEach(() => {
        service = new ProjectService(Restangular);
    });

    describe('restoreProject method', () => {

        let connection = '';

        beforeEach(inject([XHRBackend], (MockBackend) => {
            MockBackend.connections.subscribe((httpConnection: any) => connection = httpConnection);
        }));

        it('should query restore project', () => {      
            service.restoreProject({id: 2});
            expect(connection.request.url).toMatch('projects/2', 'url invalid');
        });
    })    
});

我正在使用 Karma 测试运行器。在运行测试时,它会输出

this.restangular.one is not a function

我在这里错过了什么?

【问题讨论】:

    标签: jasmine karma-runner restangular angular5


    【解决方案1】:

    好的,参考https://blog.thoughtram.io/angular/2016/11/28/testing-services-with-http-in-angular-2.html#testing-the-service

    项目服务具有依赖关系,因此不应该像
    let service = new ProjectService()

    那样初始化

    需要适当的测试平台配置(带有restangular)并在每个测试中注入 ProjectService

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多