我是Angular 2和Karma + Jasmine單元測試的新手。我無法弄清楚爲了讓這個單元測試使用嘲諷的響應,我做了什麼語義錯誤。在控制檯中,當「expect(items [0] .itemId).toBe(2);」它表示項目[0] .itemId未定義。Angular 2 Observable Service Karma Jasmine單元測試不起作用
有人能幫助我或指出我在正確的方向嗎?如果您需要任何其他信息,請告訴我。謝謝!
item.ts
export class Item {
itemId: number;
itemName: string;
itemDescription: string;
}
item.service.ts
import { Injectable, Inject } from '@angular/core';
import { Headers, Http } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { Item } from './item';
@Injectable()
export class ItemService {
private headers = new Headers({'Content-Type': 'application/json'});
constructor(
private http: Http)
{
}
getItems(listOptions: Object): Observable<Item[]> {
return this.http.post('/listItems', listOptions, {headers:this.headers})
.map(response => response.json() as Item[])
}
}
item.service.spec.ts
import { TestBed, fakeAsync, inject, tick } from '@angular/core/testing';
import { MockBackend } from '@angular/http/testing';
import { Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { ItemService } from './item.service';
import { Item } from './item';
describe('ItemService',() => {
let mockResponse, matchingItem, connection;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
ItemService,
MockBackend,
BaseRequestOptions,
{
provide: Http,
useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
deps: [MockBackend, BaseRequestOptions]
},
// { provide: XHRBackend, useClass: MockBackend }
]
});
const items = [
{
"itemId":2,
"itemName":"test item1",
"itemDescription":"hello hello"
},
{
"itemId":1,
"itemName":"name2124111121",
"itemDescription":"description212412112"
}
];
mockResponse = new Response(new ResponseOptions({body: {data: items}, status: 200}));
});
describe('getItems',() => {
//Subscribing to the connection and storing it for later
it('should return all the items',inject([ItemService, MockBackend], (service: ItemService, backend: MockBackend) => {
backend.connections.subscribe(connection => {
connection.mockRespond(mockResponse);
});
service.getItems({isActive: true, sortColumn: "lastModifiedDateUtc", sortOrder: "desc"})
.subscribe((items: Item[]) => {
expect(items.length).toBe(2);
});
}));
});
});
Plunkr:https://plnkr.co/edit/m7In2eVh6oXu8VNYFf9l?p=preview (有一些錯誤與普朗克我也需要幫助,但主要文件在那裏)
'response.json()'不是項目陣列,'response.json()。data'是。 – jonrsharpe
@jonrsharpe謝謝!我收到一個錯誤,說'屬性'數據'不存在於類型'Item []'' – user3495469
是的,因爲你使用了錯誤的類型作爲參數。 – jonrsharpe