J'ai une application AngularJS configurée avec des tests utilisant Karma + Jasmine. J'ai une fonction que je veux tester qui prend un gros objet JSON, le convertit dans un format plus consommable par le reste de l'application et renvoie cet objet converti. C'est ça.
Pour mes tests, j'aimerais que vous ayez des fichiers JSON séparés (* .json) avec un contenu JSON simulé uniquement - pas de script. Pour le test, j'aimerais pouvoir charger le fichier JSON et pomper l'objet dans la fonction que je teste.
Je sais que je peux intégrer le JSON dans une usine fictive comme décrit ici: http://dailyjs.com/2013/05/16/angularjs-5/ mais je veux vraiment que le JSON ne soit pas contenu dans le script - juste du JSON direct des dossiers.
J'ai essayé quelques trucs mais je suis assez noob dans ce domaine. Tout d'abord, j'ai configuré mon Karma pour inclure mon fichier JSON juste pour voir ce qu'il ferait:
files = [
...
'mock-data/**/*.json'
...
]
Cela a abouti à:
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
Alors je l'ai changé pour simplement servir les fichiers et ne pas les "inclure":
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Maintenant qu'ils ne sont que servis, j'ai pensé essayer de charger le fichier en utilisant $ http dans mes spécifications:
$http('mock-data/two-metrics-with-anomalies.json')
Lorsque j'ai exécuté les spécifications, j'ai reçu:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Ce qui, à mon avis, signifie qu'il attend une réponse fictive de $ httpBackend. Donc ... à ce stade, je ne savais pas comment charger le fichier à l'aide des utilitaires Angular, alors j'ai pensé essayer jQuery pour voir si je pouvais au moins faire fonctionner cela:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Cela se traduit par:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
J'inspecte cette demande dans Charles et il fait une demande à
/mock-data/two-metrics-with-anomalies.json
Alors que le reste des fichiers que j'ai configurés pour être "inclus" par Karma sont demandés à, par exemple:
/base/src/app.js
Apparemment, Karma a mis en place une sorte de répertoire de base pour servir les fichiers. Donc, pour les coups de pied, j'ai changé ma demande de données jquery en
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
Et il fonctionne! Mais maintenant je me sens sale et j'ai besoin de prendre une douche. Aidez-moi à me sentir à nouveau propre.