У мене встановлена програма 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')...
І це працює! Але зараз я відчуваю бруд і маю прийняти душ. Допоможіть мені знову почуватися чистим.