使用ngx-restangular无法正常工作的服务测试

时间:2017-12-26 05:02:03

标签: jasmine karma-runner restangular angular5

我正在使用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 test-runner。在运行测试时,它输出

this.restangular.one is not a function

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

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

项目服务具有依赖性因此不应该像初始化一样初始化     let service = new ProjectService()

需要一个合适的testbed配置(带有restangular)并在每个测试中注入ProjectService