如何测试返回JSON的angular服务函数?

如何测试返回JSON的angular服务函数?,json,angular,jasmine,karma-runner,karma-jasmine,Json,Angular,Jasmine,Karma Runner,Karma Jasmine,我有一个用angular编写的服务,它接受JSON作为输入,并在执行一些操作后返回JSON作为输出 我已经编写了一个肯定的测试用例来测试这个服务。但它一直在失败 我怀疑这一失败的原因是: 预期产出: [ Object({ key: 'Port', values: [ Object({ key: '01/01/17', values: [ Object({ date: '01/01/17', Type: 'Port', Result Code: '2', volume: '20', source:

我有一个用angular编写的服务,它接受JSON作为输入,并在执行一些操作后返回JSON作为输出

我已经编写了一个肯定的测试用例来测试这个服务。但它一直在失败

我怀疑这一失败的原因是:

预期产出:

[ Object({ key: 'Port', values: [ Object({ key: '01/01/17', values: [ Object({ date: '01/01/17', Type: 'Port', Result Code: '2', volume: '20', source: 'PCN', phone_Type: null }), Object({ date: '01/01/17', ....
实际产量:

[{"key":"Port","values":[{"key":"01/01/17","values":[{"date":"01/01/17","Type":"Port","Result Code":"2","volume":"20","source":"PCN","phone_Type":null},{"date":"01/01/17","Type":"Port","Result Code":"3","volume":"60","source":"PCN","phone_Type":null}....
这是因为存在对象 期望输出中的关键字

我如何解决这个问题?
我将karma和jasmine用于测试用例,服务是用angular4编写的。

看起来您正在尝试将JSON编码的对象(即字符串)与JavaScript对象进行比较。您的测试可能如下所示:

let jsonString = invokeMyService();
let expectedObject = { ... };
expect(jsonString).toEqual(expectedObject);
let jsonString = invokeMyService();
let expectedObject = { ... };
expect(JSON.parse(jsonString)).toEqual(expectedObject);
在将
jsonString
与对象进行比较之前,需要确保对其进行了解析。您需要像这样调用
JSON.parse()

let jsonString = invokeMyService();
let expectedObject = { ... };
expect(jsonString).toEqual(expectedObject);
let jsonString = invokeMyService();
let expectedObject = { ... };
expect(JSON.parse(jsonString)).toEqual(expectedObject);

谢谢,它对我很有用,只是做了一些小的修改,因为我需要使用“JSON.stringify”而不是“JSON.parse”,因为我在位置1处得到了错误“意外的标记“o”。