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