Unit testing 角度2可观测服务Karma Jasmine单元测试不工作

Unit 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;

我是Angular 2和Karma+Jasmine单元测试的新手。为了让这个单元测试使用模拟响应,我无法找出我犯了什么语义错误。在控制台中,当运行“expect(items[0].itemId).toBe(2);”时,会显示items[0].itemId未定义

有没有人能帮我走出困境或者给我指出正确的方向?如果您需要任何其他信息,请告诉我。谢谢

项目1.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[])
  }
}
普朗克:
(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);
        });
      }));
    });
  });