我有一个使用 Karma+Jasmine 进行测试的 AngularJS 应用程序。我有一个要测试的函数,它需要一个大型 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
显然 Karma 设置了某种基本目录来提供文件。所以为了踢球,我将我的 jquery 数据请求更改为
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
它有效!但现在我觉得很脏,需要洗个澡。帮助我再次感到干净。