Ho un'app AngularJS configurata con test utilizzando Karma + Jasmine. Desidero testare una funzione che accetta un oggetto JSON di grandi dimensioni, lo converte in un formato più utilizzabile dal resto dell'app e restituisce l'oggetto convertito. Questo è tutto.
Per i miei test, mi piacerebbe che avessi file JSON separati (* .json) con solo contenuto JSON fittizio, nessuno script. Per il test, mi piacerebbe poter caricare il file JSON e pompare l'oggetto nella funzione che sto testando.
So di poter incorporare il JSON all'interno di una finta fabbrica come descritto qui: http://dailyjs.com/2013/05/16/angularjs-5/ ma voglio davvero che il JSON non sia contenuto nello script - solo JSON diretto File.
Ho provato alcune cose, ma in questo campo sono abbastanza noob. Per prima cosa, ho impostato il mio Karma per includere il mio file JSON solo per vedere cosa avrebbe fatto:
files = [
...
'mock-data/**/*.json'
...
]
Ciò ha portato a:
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
Quindi l'ho cambiato per servire solo i file e non "includerli":
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Ora che sono serviti solo, ho pensato di provare a caricare il file usando $ http dalle mie specifiche:
$http('mock-data/two-metrics-with-anomalies.json')
Quando ho eseguito la specifica che ho ricevuto:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Che a mio avviso significa che si aspetta una risposta derisa da $ httpBackend. Quindi ... a questo punto non sapevo come caricare il file utilizzando le utilità Angular, quindi ho pensato di provare jQuery per vedere se potevo almeno farlo funzionare:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Questo risulta in:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Ispeziono questa richiesta in Charles e ne sto facendo una richiesta
/mock-data/two-metrics-with-anomalies.json
Mentre il resto dei file che ho configurato per essere "incluso" da Karma vengono richiesti a, ad esempio:
/base/src/app.js
Apparentemente Karma sta configurando una sorta di directory di base da cui servire i file. Quindi per i calci ho cambiato la mia richiesta di dati jquery in
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
E funziona! Ma ora mi sento sporco e ho bisogno di fare una doccia. Aiutami a sentirmi di nuovo pulito.