我有一个使用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' }
我在Charles中检查了这个请求,它向
/mock-data/two-metrics-with-anomalies.json
而我配置为由Karma“包含”的其余文件则在以下位置请求,例如:
/base/src/app.js
显然,Karma正在设置某种基本目录来提供来自的文件。因此,我将我的jquery数据请求更改为
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
而且它起作用了!但是现在我觉得很脏,需要洗个淋浴。帮我恢复清白吧。
https://stackoverflow.com/questions/17370427
复制相似问题