我有一个 AngularJS 应用程序设置了使用 Karma + Jasmine 的测试。我想测试一个函数,它接受一个大型 JSON 对象,将其转换为应用程序其余部分更易于使用的格式,并返回转换后的对象。就是这样。
对于我的测试,我希望您有单独的 JSON 文件(* 。JSON) ,只包含模拟 JSON 内容——没有脚本。对于测试,我希望能够加载 JSON 文件并将对象输入到我正在测试的函数中。
我知道我可以像这里描述的那样将 JSON 嵌入到一个模拟工厂中: http://dailyjs.com/2013/05/16/angularjs-5/,但是我真的希望 JSON 不包含在脚本中——只包含直接的 JSON 文件。
我尝试了一些方法,但在这方面我还是相当菜的。首先,我将 Karma 设置为包含 JSON 文件,看看它会做什么:
files = [
...
'mock-data/**/*.json'
...
]
结果是:
Chrome 27.0 (Mac) ERROR
Uncaught SyntaxError: Unexpected token :
at /Users/aaron/p4workspace4/depot/sitecatalyst/branches/anomaly_detection/client/anomaly-detection/mock-data/two-metrics-with-anomalies.json:2
所以我修改了它,只提供文件而不是“包含”它们:
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
现在他们只是服务,我想我会尝试加载文件使用 $http 从我的规范:
$http('mock-data/two-metrics-with-anomalies.json')
当我运行我收到的规格:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
在我的理解中,这意味着它期望来自 $httpBackend 的模拟响应。所以... 在这一点上,我不知道如何加载文件使用 Angular 实用程序,所以我想我应该尝试 jQuery,看看我是否至少可以让它工作:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
结果是:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
我在查尔斯检查这个请求
/mock-data/two-metrics-with-anomalies.json
而我配置为被 Karma“包含”的其他文件被请求,例如:
/base/src/app.js
显然卡玛在建立某种基本目录来提供文件。因此,我将 jquery 数据请求更改为
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
它确实起作用了! 但是现在我觉得很脏,需要洗个澡。帮助我再次感到干净。