Angular 2单元测试

Angular 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

请参阅下面我实现了解决方案,它是由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(); 
    });