2014-08-29 4 views
10

Meine Anwendung scheint gut zu laufen. Ich fing an, Testfälle zu schreiben und bekam den gefürchteten Injector bereits erstellt, kann kein Modul registrieren! Fehler.Kann mich nicht rumschlagen "Injektor bereits erstellt, kann kein Modul registrieren!" Fehler

Hier ist mein Testcode. Dies sind die einzigen Zeilen in der Datei.

'use strict'; 

var fac, 
    osf, 
    obff; 

beforeEach(module("myApp")); 

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

Ich weiß wirklich nicht wohin von hier - ich gehe im Kreis.

EDIT - hier ist meine karma.conf.js Datei. Ich habe andere Tests, die gut laufen.

// 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

Können Sie uns Ihre karma.conf.js zeigen, wenn welche vorhanden sind? – axelduch

+0

@aduch jetzt gepostet. –

+4

Sie haben Ihren Test nicht in 'describe ('Foo',/* Ihre Funktion mit dem angegebenen Code * /) verpackt;' könnte es das Problem sein? – axelduch

Antwort

22

Sie haben Ihre Test in einem describe gewickelt, würde es in etwa so aussehen:

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

    var fac, 
     osf, 
     obff; 

    beforeEach(module("myApp")); 

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

Ich bin so ein Donut. . . Vielen Dank – jolySoft

5

Wenn Sie Anrufe module('someApp') mischen und inject($someDependency) wird diese Fehlermeldung angezeigt.

Alle Ihre Anrufe an module('someApp') müssen vor Ihren Anrufen an inject($someDependency) erfolgen.

1

Um über diese Antwort von @axelduch hinzuzufügen, hatte ich ein Problem, wo eine andere Datei nicht hätte die Beschreibung in, und das ist, was verursacht, meine Injektor bereits erstellt, kann kein Modul registrieren!

Wenn Sie führen Sie Ihre Tests mit sehr vielen Dateien wie diese verbunden sind (dies wird mit requirejs)

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

anschließend sicher, EACH-Tests, die in diesem Lauf sind hier beschreiben ihre eigene enthält Methode beschreiben in ihnen. So zum Beispiel, würde sich die Test1-Datei wie diese

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

Stellen Sie sicher, alle verknüpften Tests im Rahmen der Testdatei ihre eigenen beschreiben hat Methode, sonst können Sie es nicht wissen, aber es ist ein weiterer Test, der macht Ihr Komponententest schlägt fehl .. und es kann eine lange Zeit dauern, bis Sie es erkannt haben.

0

Dies kann auch bedeuten, Sie so etwas wie die haben folgende:

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

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

das falsch ist, wird der Test Runner erlaubt Ihnen nicht, es in dieser Reihenfolge, wie seine bereits damit beschäftigt injizierende zu tun, und Sie sind über die Phase zum Einrichten bietet.

Der richtige Weg ist natürlich:

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

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

sicherzustellen, dass Sie es in der richtigen Reihenfolge haben.

Verwandte Themen