Mam skonfigurowaną aplikację AngularJS z testami przy użyciu Karma + Jasmine. Mam funkcję, którą chcę przetestować, która pobiera duży obiekt JSON, konwertuje go na format, który jest bardziej użyteczny przez resztę aplikacji, i zwraca przekonwertowany obiekt. Otóż to.
Do moich testów chciałbym mieć osobne pliki JSON (* .json) tylko z fałszywą zawartością JSON - bez skryptu. Na potrzeby testu chciałbym móc załadować plik JSON i wpompować obiekt do testowanej funkcji.
Wiem, że mogę osadzić JSON w fałszywej fabryce, jak opisano tutaj: http://dailyjs.com/2013/05/16/angularjs-5/ ale naprawdę chcę, aby JSON nie był zawarty w skrypcie - po prostu zwykły JSON akta.
Próbowałem kilku rzeczy, ale w tej dziedzinie jestem dość noobem. Najpierw skonfigurowałem Karmę tak, aby zawierała mój plik JSON, aby zobaczyć, co zrobi:
files = [
...
'mock-data/**/*.json'
...
]
Spowodowało to:
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
Więc zmieniłem to tak, aby tylko obsługiwał pliki, a nie je „włączał”:
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Teraz, gdy są tylko obsługiwane, pomyślałem, że spróbuję załadować plik przy użyciu $ http z mojej specyfikacji:
$http('mock-data/two-metrics-with-anomalies.json')
Kiedy uruchomiłem specyfikację, którą otrzymałem:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Co w moim rozumieniu oznacza, że oczekuje fałszywej odpowiedzi od $ httpBackend. Więc ... w tym momencie nie wiedziałem, jak załadować plik za pomocą narzędzi Angular, więc pomyślałem, że spróbuję wypróbować jQuery, aby sprawdzić, czy przynajmniej uda mi się to uruchomić:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
To skutkuje:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Sprawdzam tę prośbę w Charles i zwraca się do
/mock-data/two-metrics-with-anomalies.json
Podczas gdy pozostałe pliki, które skonfigurowałem jako „dołączane” przez Karmę, są żądane pod adresem, na przykład:
/base/src/app.js
Najwyraźniej Karma tworzy jakiś katalog bazowy, z którego będą obsługiwane pliki. Więc dla kopnięć zmieniłem żądanie danych jQuery na
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
I to działa! Ale teraz czuję się brudna i muszę wziąć prysznic. Pomóż mi znów poczuć się czystym.