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)时运行测试所讨论的代码,任何帮助,将最赞赏。
答
请参阅下面我实现了解决方案,它是由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();
});
好建议,你的身体是不是有效的JSON。键和字符串值必须用双引号括起来。为什么不创建一个JavaScript对象数组,然后调用JSON.stringify()来获得有效的JSON? –
嘿JB Nizet谢谢你的建议,它解决了我遇到的问题 – Mahesh