Не могу опустить голову "Инжектор уже создан, не может зарегистрировать модуль!" ошибка

Мое приложение работает нормально. Я начал писать тестовые примеры и получил опасный Инжектор уже создан, не могу зарегистрировать модуль!.

Вот мой тестовый код. Это единственные строки в файле.

'use strict';

var fac,
    osf,
    obff;

beforeEach(module("myApp"));

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

Я действительно не знаю, куда идти отсюда - я собираюсь в кругах.

EDIT - вот мой файл karma.conf.js. У меня есть другие тесты, которые работают нормально.

// 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
    });
};

Ответ 1

Вы не завернули свой тест в describe, он выглядел бы примерно так:

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

    var fac,
        osf,
        obff;

    beforeEach(module("myApp"));

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

Ответ 2

Если вы смешиваете вызовы с module('someApp') и inject($someDependency), вы получите эту ошибку.

Все ваши вызовы module('someApp') должны появиться перед вашими вызовами на inject($someDependency).

Ответ 3

Чтобы добавить поверх этого ответа от @axelduch, у меня была проблема, когда другой файл не содержал бы описания, и что то, что уже создало мой Injector, не может зарегистрировать модуль!

Если вы запускаете свои тесты со многими связанными файлами (это использует requirejs)

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

Затем убедитесь, что EACH тестов, которые запускаются в этом описании, содержит в них свой собственный метод описания. Так, например, файл Test1 будет выглядеть следующим образом:

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

Убедитесь, что все ваши файлы связанных тестов в рамках вашего теста имеют свой собственный метод описания, иначе вы можете не знать об этом, но это еще один тест, из-за которого ваш unit test терпит неудачу.. и он может долго вам это нужно.

Ответ 4

Это также означает, что у вас есть что-то вроде следующего:

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

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

Это неправильно, тестовый бегун не позволит вам сделать это в этом порядке, поскольку его уже занятая инъекция и вы прошли фазу для настройки.

Правильный способ:

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

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

убедитесь, что у вас есть это в правильном порядке.