我正在运行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"}];
有什么建议吗?
答案 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"})];
这应该对你有用