JSON,解析在Jasmine中失败了

时间:2014-07-30 11:29:38

标签: angularjs jasmine karma-runner karma-jasmine

我正在运行Karma 12.19并使用Jasmine进行单元测试。唯一失败的测试在JSON.parse函数中失败。

跟踪:

SyntaxError: Unexpected token d
    at Object.parse (native)
    at /var/html/components/src/controllers/MainCtrl.js:9:8129
    at /var/html/libs/angular/angular.min.js:72:199
    at J (/var/html/libs/angular/angular.min.js:99:469)
    at J (/var/html/libs/angular/angular.min.js:99:469)
    at /var/html/libs/angular/angular.min.js:101:126
    at k.$eval (/var/html/libs/angular/angular.min.js:111:353)
    at k.$digest (/var/html/libs/angular/angular.min.js:108:419)
    at k.$apply (/var/html/libs/angular/angular.min.js:112:173)
    at h (/var/html/libs/angular/angular.min.js:72:454)

此行的代码失败:

for (var i = 0; i < templates.length; i++) {
    templates[i].data = JSON.parse(templates[i].data); // here
}

代码按预期运行,生产中没有错误,但jasmine和/或Karma没有处理它。

测试数据:

var templates = [{data: "data", name: "name"}];

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您正在尝试将“数据”解析为JSON,这是无效的JSON。 您可以将整个模板解析为JSON,但是您必须将其声明包装在sinqle引号中以使其成为字符串:

var templates = '[{data: "data", name: "name"}]';

或者如果你想保留你正在做的事情,就把有效的JSON放到数据属性中:

var templates = [{data: '{x: "something"}', name: "name"}];

答案 1 :(得分:1)

如果你有一个工作的javascript对象(不一定是一个有效的JSON对象),你想要解析它来进行测试,你可以使用类似的东西:

var templates = [JSON.stringify({data: "data", name: "name"})];

这应该对你有用