Yükleme alay JSON dosyası Karma AngularJS içinde test
AngularJS bir uygulama testleri Karma Yasemin kullanarak hazırladım. Büyük bir JSON nesne alır, app geri kalanı tarafından daha tüketilebilir bir biçime dönüştüren test etmek istiyorum bir işlevi var, ve dönüştürülen nesne döndürür. İşte bu kadar.
Benim testleri için, ayrı JSON dosyaları (*.json) alay JSON ile içerik sadece script--. Test için, JSON dosyayı yükleyip test ediyorum fonksiyonu içine nesne pompalamak için mümkün olmak istiyorum.
Burada tarif edildiği gibi sahte bir fabrika içinde JSON embed biliyorum: http://dailyjs.com/2013/05/16/angularjs-5/ ama ben gerçekten sadece JSON JSON dosyaları düz--script içinde olmak istemiyor.
Birkaç şey denedim ama bu alanda oldukça çaylak değilim. İlk olarak, sadece bunun ne işe yarayacağını görmek için JSON dosyası eklemek için Karmamı kurdum:
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
O zaman sadece bu dosyaları hizmet için değiştirdim ve"," onlara
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Sadece hizmet ettiklerini şimdi, bu dosya $http kullanarak yüklemek için benim spec içinde denemek istedim:
$http('mock-data/two-metrics-with-anomalies.json')
Spec koştu aldı:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Benim anlamakta $httpBackend gelen alay bir yanıt beklediğini gösteriyor. Yani...bu noktada en azından bu iş için alabilir görmek için bir WordPress kullanmak denemek istedim dosya Açısal programları kullanarak yüklemek için nasıl bilmiyordum:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Bu sonuçlar:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Charles bu isteÄŸi kontrol ediyorum ve bir istek yapmak
/mock-data/two-metrics-with-anomalies.json
Olacak şekilde yaptım dosyaları geri kalanı "" Karma istenmekte, örneğin: . dahil ise
/base/src/app.js
Görünüşe göre Karma temel dizin çeşit dosyaları hizmet için tuzak kuruyor. İçin için bir WordPress kullanmak veri isteğimi değiştirdim tekme attı
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
Ve işe yarıyor! Ama şimdi kendimi kötü hissediyorum ve bir duş almak gerekir. Beni tekrar temiz hissetmenize yardımcı.
CEVAP
Açısal tohum ile açısal bir setup kullanıyorum. Yukarı doğru bu çözümü buldum .Fikstür dosyaları ve jasmine-jquery.js json. Diğerleri bu cevap ima vardı ... ama doğru yerde tüm parçaları almak için aldı. Bu başkası yardımcı olur umarım.
/test/mock
ve benim web uygulaması /app
bir klasörde json benim dosyalarım var.
karma.conf.js
Bu girişler var benim (diğerleri arasında):
basePath: '../',
files: [
...
'test/vendor/jasmine-jquery.js',
'test/unit/**/*.js',
// fixtures
{pattern: 'test/mock/*.json', watched: true, served: true, included: false}
],
o zaman benim test dosyası vardır:
describe('JobsCtrl', function(){
var $httpBackend, createController, scope;
beforeEach(inject(function ($injector, $rootScope, $controller) {
$httpBackend = $injector.get('$httpBackend');
jasmine.getJSONFixtures().fixturesPath='base/test/mock';
$httpBackend.whenGET('http://blahblahurl/resultset/').respond(
getJSONFixture('test_resultset_list.json')
);
scope = $rootScope.$new();
$controller('JobsCtrl', {'$scope': scope});
}));
it('should have some resultsets', function() {
$httpBackend.flush();
expect(scope.result_sets.length).toBe(59);
});
});
Gerçek hile jasmine.getJSONFixtures().fixturesPath='base/test/mock';
Başlangıçta sadece 29 ** set vardı ama orada base
ihtiyacı vardı.
Temel olmadan, bu gibi hataları var:
Error: JSONFixture could not be loaded: /test/mock/test_resultset_list.json (status: error, message: undefined)
at /Users/camd/gitspace/treeherder-ui/webapp/test/vendor/jasmine-jquery.js:295
JSON dosyası içinde yorum kullanabilir...
Yükleme yerel json dosyası...
Nasıl alay Angularjs söz veren bir ser...
Herhangi bir JSON AngularJS içinde JSO...
Ne zaman bir komut dosyası etiketi içi...