私はAngular 2とKarma + Jasmineユニットテストの初心者です。私はこの単体テストに模擬応答を使用させるために、私が意味論上の誤りをどのようにして作ったのか分かりません。コンソールで、 "expect(items [0] .itemId).toBe(2);" item [0] .itemIdは定義されていません。角2観測サービスカルマジャスミンユニットテストが動作しない
誰かが私を助けたり、正しい方向に向けることができますか?追加情報が必要な場合はお知らせください。ありがとう!
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 (多少の誤差はであり、 Plunkr私も助けが必要ですが、メインファイルはそこにあります)
'response.json() '項目の配列ではない、' response.json()。data'があるべきです。 – jonrsharpe
@jonrsharpeありがとう! 'Item ']'の上に' Property 'data'が存在しないというエラーが表示されます – user3495469
引数に間違った型を使用したためです。 – jonrsharpe