SORU
28 HAZİRAN 2013, Cuma


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
30 AĞUSTOS 2013, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • Joe DiFeo

    Joe DiFeo

    7 AĞUSTOS 2012
  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011