Unit testing 角度2可观测服务Karma Jasmine单元测试不工作
我是Angular 2和Karma+Jasmine单元测试的新手。为了让这个单元测试使用模拟响应,我无法找出我犯了什么语义错误。在控制台中,当运行“expect(items[0].itemId).toBe(2);”时,会显示items[0].itemId未定义 有没有人能帮我走出困境或者给我指出正确的方向?如果您需要任何其他信息,请告诉我。谢谢 项目1.tsUnit testing 角度2可观测服务Karma Jasmine单元测试不工作,unit-testing,angular,jasmine,Unit Testing,Angular,Jasmine,我是Angular 2和Karma+Jasmine单元测试的新手。为了让这个单元测试使用模拟响应,我无法找出我犯了什么语义错误。在控制台中,当运行“expect(items[0].itemId).toBe(2);”时,会显示items[0].itemId未定义 有没有人能帮我走出困境或者给我指出正确的方向?如果您需要任何其他信息,请告诉我。谢谢 项目1.ts export class Item { itemId: number; itemName: string;
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[])
}
}
普朗克:
(Plunkr也有一些错误,我需要帮助,但主文件在那里)mockResponse主体与实际响应主体不匹配,这就是我收到错误的原因
mockResponse=newresponse(newresponseOptions({body:{data:items},status:200}))代码>应该是mockResponse=newresponse(newresponseOptions({body:items,status:200}))
response.json()
不是项的数组,response.json().data
是。@jornsharpe谢谢!我收到一个错误,该错误表示类型“Item[]”上不存在属性“data”
是,因为您对参数使用了错误的类型。@jonrsharpe您能告诉我应该使用哪种类型吗?反映您发送的实际对象的类型吗?在本例中,一个名为data
的字段包含项数组。如果这与实际有效载荷不同,请修复测试以反映真实结构。
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);
});
}));
});
});