2014-08-29 16 views
10

Uygulamam düzgün çalışıyor gibi görünüyor. Test senaryoları yazmaya başladım ve zaten oluşturulmuş olan Enjektörün korkuluğunu aldım, bir modülü kaydedemiyorum! hatası.Başım ağrıyor "Enjektör zaten oluşturulmuş, bir modülü kaydedemezsiniz!" hata

İşte benim test kod. Bunlar dosyadaki tek satırlardır.

'use strict'; 

var fac, 
    osf, 
    obff; 

beforeEach(module("myApp")); 

beforeEach(inject(function (OrderSashingFactory) { 
    fac = OrderSashingFactory; 
})); 

Gerçekten buradan nereye gideceğimi bilmiyorum - Dairelere gidiyorum.

DÜZENLEME - burada benim karma.conf.js dosya. İyi çalışan başka testlerim var.

// Karma configuration 
// Generated on Mon Aug 25 2014 21:08:59 GMT-0400 (Eastern Daylight Time) 

module.exports = function (config) { 
    config.set({ 

     // base path, that will be used to resolve files and exclude 
     basePath: '', 


     // frameworks to use 
     frameworks: ['mocha', 'chai', 'sinon'], 


     // list of files/patterns to load in the browser 
     files: [ 
      'app/bower_components/angular/angular.js', 
      'app/bower_components/angular-route/angular-route.js', 
      'app/bower_components/angular-mocks/angular-mocks.js', 
      'app/js/*.js', 
      'app/test/js/*.js', 
      'app/partials/**/*.html' 
     ], 

     preprocessors: { 
      'app/partials/**/*.html' : 'html2js' 
     }, 

     ngHtml2JsPreprocessor: { 
      // strip app from the file path 
      stripPrefix: 'app/' 
     }, 

     // list of files to exclude 
     exclude: [ 

     ], 

//  plugins: [ 
//   'karma-mocha', 
//   'karma-chrome-launcher' 
//  ], 


     // test results reporter to use 
     // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' 
     reporters: ['progress'], 


     // web server port 
     port: 9876, 


     // enable/disable colors in the output (reporters and logs) 
     colors: true, 


     // level of logging 
     // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
     logLevel: config.LOG_INFO, 


     // enable/disable watching file and executing tests whenever any file changes 
     autoWatch: true, 


     // Start these browsers, currently available: 
     // - Chrome 
     // - ChromeCanary 
     // - Firefox 
     // - Opera (has to be installed with `npm install karma-opera-launcher`) 
     // - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`) 
     // - PhantomJS 
     // - IE (only Windows; has to be installed with `npm install karma-ie-launcher`) 
     browsers: ['Chrome'], 


     // If browser does not capture in given timeout [ms], kill it 
     captureTimeout: 60000, 


     // Continuous Integration mode 
     // if true, it capture browsers, run tests and exit 
     singleRun: false 
    }); 
}; 
+0

Eğer varsa, karma.conf.js'nizi bize gösterebilir misiniz? – axelduch

+0

@aduch yayınlandı. –

+4

Testinizi “anlat” (“Foo ',/* işleviniz verilen kodla * /);” diye sorabilirsiniz. – axelduch

cevap

22

Bir describe içinde testinizi sarılmış değil, böyle görünecektir:

describe('MyTestName', function() { 
    'use strict'; 

    var fac, 
     osf, 
     obff; 

    beforeEach(module("myApp")); 

    beforeEach(inject(function (OrderSashingFactory) { 
     fac = OrderSashingFactory; 
    })); 
}); 
+0

Ben bir çörek gibiyim. . . Teşekkürler – jolySoft

5

Eğer module('someApp') aramaları karıştırma ve inject($someDependency) bu hatayı alırsınız. module('someApp') için

Tüm aramalarınız inject($someDependency) için çağrılar önce olması gerekiyor.

1

@axelduch adresinden yanıtın üstüne eklemek için, başka bir dosyanın açıklamaya sahip olmadığı bir sorunla karşılaştım ve bu, Enjektör'ün zaten oluşturulmasına neden oluyordu, bir modülü kaydedemiyor!

böyle bağlantılı birçok dosya ile testlerle (bu requirejs kullanıyor)

define(["require", "exports", "./test1.tests", "./test2.tests"], function (require, exports, Test1, Test2) { 
    describe("Test Module", function() { 
     Test1.tests(); 
     Test2.tests(); 
    }); 
}); 

O zaman bu çalıştırılır HER testler onları yöntemi tarif kendi içeren burada tarif sağlamak çalıştırırsanız. Yani, örneğin, Test1 dosya aksi takdirde bunu bilmiyor olabilir, yöntem tarif kendi sahip olduğu tüm bağlantılı testler testin kapsamında dosyasını olun bu

function tests() { 
     describe("Test directive", function() { 
      beforeEach(function() { 
      }); 
      afterEach(function() { 
      }); 
     }); 
    } 

gibi görünecektir ama yapar başka bir test var ünite test başarısız olur .. ve bunu farketmesi uzun zaman alabilir.

0

Bu aynı zamanda böyle bir şey var anlamına gelebilir şunlardır: yanlıştır

inject(function ($compile, $rootScope, $document, $timeout) { 
    // Code processing inject 
}); 

module(function($provide) { 
    // Provide code 
}) 

test atlet onun zaten meşgul enjekte olarak bu sırada bunu yapmak için izin vermez ve faz geçmiş kurmak için sağlar.

elbette doğru yoludur:

module(function($provide) { 
    // Provide code 
}) 

inject(function ($compile, $rootScope, $document, $timeout) { 
    // Code processing inject 
}); 

doğru sırayla ona sahip olun.

İlgili konular