Karma + Jasmine kullanarak testlerle kurulmuş bir AngularJS uygulamam var. Test etmek istediğim, büyük bir JSON nesnesi alan, onu uygulamanın geri kalanı tarafından daha tüketilebilir bir biçime dönüştüren ve dönüştürülen nesneyi döndüren bir işlevim var. Bu kadar.
Testlerim için, yalnızca sahte JSON içeriğine sahip ayrı JSON dosyalarınızın (* .json) olmasını istiyorum - komut dosyası yok. Test için, JSON dosyasını yükleyebilmek ve nesneyi test ettiğim işleve pompalayabilmek istiyorum.
JSON'u burada açıklandığı gibi bir sahte fabrikaya yerleştirebileceğimi biliyorum: http://dailyjs.com/2013/05/16/angularjs-5/ ancak JSON'un komut dosyası içinde yer almamasını gerçekten istiyorum - sadece düz JSON Dosyalar.
Birkaç şey denedim ama bu alanda oldukça acemiyim. İlk olarak, ne yapacağını görmek için Karma'mı JSON dosyamı içerecek şekilde ayarladım:
files = [
...
'mock-data/**/*.json'
...
]
Bu sonuçlandı:
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
Bu yüzden, onları "içermek" yerine yalnızca dosyaları sunmak için değiştirdim:
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Artık yalnızca sunulduğuna göre, dosyamı $ http kullanarak benim spesifikasyonumdan yüklemeye çalışacağımı düşündüm:
$http('mock-data/two-metrics-with-anomalies.json')
Aldığım spesifikasyonu çalıştırdığımda:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Benim anlayışıma göre, $ httpBackend'den alay konusu bir yanıt beklediği anlamına geliyor. Yani ... bu noktada Angular yardımcı programlarını kullanarak dosyayı nasıl yükleyeceğimi bilmiyordum, bu yüzden en azından işe yarayıp yaramayacağını görmek için jQuery'yi deneyeceğimi düşündüm:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Bunun sonucu:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Bu isteği Charles'ta inceliyorum ve bu bir talepte bulunuyor
/mock-data/two-metrics-with-anomalies.json
Karma tarafından "dahil edilmek" üzere yapılandırdığım dosyaların geri kalanı şurada istenirken, örneğin:
/base/src/app.js
Görünüşe göre Karma dosyalara hizmet vermesi için bir tür temel dizin kuruyor. Bu yüzden tekmeler için jquery veri isteğimi şu şekilde değiştirdim:
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
Ve çalışıyor! Ama şimdi kendimi kirli hissediyorum ve duş almam gerekiyor. Tekrar temiz hissetmeme yardım et.