【发布时间】:2016-03-13 18:33:24
【问题描述】:
Angular2中如何对Http get MockBackend做单元测试?
我在测试我的 http 单元测试时遇到了问题。
每次我看 MockBackend 时都会感到困惑,很多代码和一些导入都不起作用。
我只想要一个非常基本的 http get 单元测试
我正在使用:typescript、angular2、jasmine 和 karma runner。
我的实际代码运行良好。
这是我正在测试的代码:
import {Injectable} from 'angular2/angular2';
import {HTTP_PROVIDERS, Http, Headers} from 'angular2/http';
@Injectable()
export class FirebaseService{
headers: Headers;
//Test issue seems to be here when I inject Http instance.
constructor(public http?: Http) {
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
}
//This is the method I'm testing.
public getSpotifyTracks = ():Promise<Object> =>{
return this.http
.get('https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem', {headers:this.headers})
.map((response) => {
return response.json()
}).toPromise();
}
}
这是我对该代码的单元测试:
import {it, iit, describe, expect, inject, injectAsync, beforeEachProviders, fakeAsync, tick} from 'angular2/testing';
import {HTTP_PROVIDERS, Http, Headers} from 'angular2/http';
import {FirebaseService} from '../app/firebase-service';
describe('Firebase Service Calls', () => {
beforeEachProviders(()=> [Http, FirebaseService]);
//Issue seems to be here????
it('get all tracks from spotify', injectAsync([FirebaseService],(service) => {
return service.getSpotifyTracks().then((response) => {
expect(response.length).not.toBe(null);
});
}), 3000);
});
【问题讨论】:
-
这里有一个example。
-
嗨,Eric,您可以对我上面的代码进行单元测试作为答案吗?我查看了链接,但仍然无法使其在单元测试中工作
-
这里是一个非常简单实用的例子stackoverflow.com/a/37733428/2375648
-
使用 Angular2 最终版本的 HTTP 单元测试 - stackoverflow.com/questions/40108504/…
标签: javascript unit-testing typescript jasmine angular