Tengo una aplicación AngularJS configurada con pruebas usando Karma + Jasmine. Tengo una función que quiero probar que toma un objeto JSON grande, lo convierte a un formato que es más consumible por el resto de la aplicación y devuelve ese objeto convertido. Eso es.
Para mis pruebas, me gustaría que tuviera archivos JSON separados (* .json) con contenido JSON simulado únicamente, sin script. Para la prueba, me gustaría poder cargar el archivo JSON y bombear el objeto a la función que estoy probando.
Sé que puedo incrustar el JSON dentro de una fábrica simulada como se describe aquí: http://dailyjs.com/2013/05/16/angularjs-5/ pero realmente quiero que el JSON no esté contenido en el script, solo JSON directo archivos.
He intentado algunas cosas, pero soy bastante novato en esta área. Primero, configuré mi Karma para incluir mi archivo JSON solo para ver qué haría:
files = [
...
'mock-data/**/*.json'
...
]
Esto resultó en:
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
Entonces lo cambié para servir los archivos y no "incluirlos":
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Ahora que solo se sirven, pensé en intentar cargar el archivo usando $ http desde mi especificación:
$http('mock-data/two-metrics-with-anomalies.json')
Cuando ejecuté la especificación recibí:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Lo que, según tengo entendido, significa que espera una respuesta simulada de $ httpBackend. Entonces ... en este punto no sabía cómo cargar el archivo usando las utilidades de Angular, así que pensé en probar jQuery para ver si al menos podía hacer que eso funcionara:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Esto resulta en:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Inspecciono esta solicitud en Charles y está haciendo una solicitud a
/mock-data/two-metrics-with-anomalies.json
Mientras que el resto de los archivos que he configurado para ser "incluidos" por Karma se solicitan en, por ejemplo:
/base/src/app.js
Aparentemente, Karma está configurando una especie de directorio base desde el que servir los archivos. Así que, por diversión, cambié mi solicitud de datos jquery a
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
¡Y funciona! Pero ahora me siento sucia y necesito darme una ducha. Ayúdame a sentirme limpio de nuevo.