2016-08-22 131 views
2

我想單元測試使用茉莉花的Angular 2中的服務,並且需要在響應選項類的Body參數中添加JSON數據數組,我嘗試了各種方法,並且失敗了,請查看代碼下面片段:Angular 2單元測試

it('returns a list of employees with correct first-employee data', done => { 
     //Arrange 
     mockBackend.connections.subscribe((c: any) => { 
      let response = new ResponseOptions({ 
       body: `[ 
          { 
           travelReasonId:1, 
           name:'Operator visit' 
          }, 
          { 
           travelReasonId:2, 
           name:'3rd Party visit' 
          }, 
          { 
           travelReasonId:3, 
           name:'MGS visit' 
          } 
         ]` 
      }); 
      c.mockRespond(new Response(response)); 
     }); 
     // Act 
     let result: any; 
     travelReasonService.getAllTravelReasons() 
      .subscribe((_result) => { result = _result; }); 
     // Assert 
      let firstValue = { 
      travelReasonId: 1, 
      name: 'Operator visit' 
     }; 
     console.log(result); 
     expect(result[0]).toEqual(firstValue); 
     expect(result.length).toEqual(3); 
    }); 

試驗結果指出,語法錯誤:JSON解析錯誤:應爲「}」(線321)時運行測試所討論的代碼,任何幫助,將最讚賞。

+0

好建議,你的身體是不是有效的JSON。鍵和字符串值必須用雙引號括起來。爲什麼不創建一個JavaScript對象數組,然後調用JSON.stringify()來獲得有效的JSON? –

+0

嘿JB Nizet謝謝你的建議,它解決了我遇到的問題 – Mahesh

回答

2

請參閱下面我實現瞭解決方案,它是由JB Nizet

it('returns a list with two employees', done => { 
     //Arrange 
     let travelReasons: TravelReason[]; 
     travelReasons = []; 
     let travelReason_1 = new TravelReason(); 
     let travelReason_2 = new TravelReason(); 
     travelReason_1.name = 'Operator visit'; 
     travelReason_1.travelReasonId = 1; 
     travelReason_2.name = '3rd Party visit'; 
     travelReason_2.travelReasonId = 2; 
     travelReasons.push(travelReason_1); 
     travelReasons.push(travelReason_2); 

     mockBackend.connections.subscribe((c: any) => { 
      let response = new ResponseOptions({ 
       body: JSON.stringify(travelReasons) 
      }); 
      c.mockRespond(new Response(response)); 
     }); 
     // Act   
     let result: any; 
     travelReasonService.getAllTravelReasons() 
      .subscribe((_result) => { result = _result; }); 

     // Assert 
     let firstValue = { 
      travelReasonId: 1, 
      name: 'Operator visit' 
     }; 

     let secondValue = { 
      'travelReasonId': 2, 
      'name': '3rd Party visit' 
     }; 

     expect(result[0]).toEqual(firstValue); 
     expect(result[1]).toEqual(secondValue); 
     expect(result.length).toEqual(2); 
     done(); 
    });