У меня есть приложение AngularJS, настроенное с помощью тестов с использованием Karma + Jasmine. У меня есть функция, которую я хочу проверить, которая принимает большой объект JSON, преобразует его в формат, который больше потребляется остальной частью приложения, и возвращает этот преобразованный объект. Что это.
Для моих тестов, я бы хотел, чтобы у вас были отдельные файлы JSON (*.json) только с содержимым только mock JSON - no script. Для теста я хотел бы загрузить файл JSON и передать объект в функцию, которую я тестирую.
Я знаю, что могу встроить JSON в mock factory, как описано здесь: http://dailyjs.com/2013/05/16/angularjs-5/, но я действительно хочу, чтобы JSON не содержаться в script - только прямые файлы JSON.
Я пробовал несколько вещей, но в этой области я довольно неплохо. Во-первых, я настроил свою Карму, чтобы включить мой 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')...
И это работает! Но теперь я чувствую себя грязным и должен принять душ. Помогите мне снова почувствовать себя чистым.