Angular Моты загружаются более одного раза в исполнении Карма / Жасмин - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть AngularJS проект, и я использую Webpack для связывания своего проекта и всех сторонних зависимостей, которые я использую в нем.

Теперь я хочу настроить Jasmine с помощью Karma для запуска модульных тестов.

Я разделил файлы в следующей структуре

.
+-- _src
|   +-- _main
|       +-- _app
|           +-- index.html
|           +-- main.ts
|           +-- another-file.ts
|   +-- test
|       +-- _app
|           +-- main.spec.ts

Для настройки Karma я использую следующие плагины:

karma-chrome-launcher, karma-jasmine, karma-spec-reporter, karma-webpack

Я использую karma.conf.js ниже. Я использовал карму для генерации начальной конфигурации. После этого я добавил дополнительные необходимые настройки.

module.exports = function () {

    config.set({
        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: "",

        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: [
            "jasmine",
        ],

        // list of files / patterns to load in the browser
        files :  { pattern: "src/test/app/**/*.spec.ts" },

        // webpack built file to load in the browser
        webpack: require("./webpack.config.js")(app),

        // list of files / patterns to exclude
        exclude: [],

        plugins: [
            "karma-chrome-launcher",
            "karma-jasmine",
            "karma-spec-reporter",
            "karma-webpack",
        ],

        // preprocess matching files before serving them to the browser
        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {
            "src/test/app/**/*.spec.ts": ["webpack"]
        },

        // test results reporter to use
        // possible values: 'dots', 'progress'
        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ["spec"],

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

        // log browser console output into terminal
        browserConsoleLogOptions: {
            terminal: false
        },

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

        // start these browsers
        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: ["Chrome"],

        // Continuous Integration mode
        // if true, Karma captures browsers, runs the tests and exits
        singleRun: false,

        // Concurrency level
        // how many browser should be started simultaneous
        concurrency: Infinity,
    });
};

Когда я запускаю эту настройку сейчас, я вызываю ее с помощью следующей команды

karma start karma.conf.js

Она запускается, и я могу запустить свои модульные тесты с karma. Однако проблема возникает сейчас, когда я создаю другой модульный тест с именем another.spec.ts

.
+-- _src
|   +-- _main
|       +-- _app
|           +-- index.html
|           +-- main.ts
|           +-- another-file.ts
|   +-- test
|       +-- _app
|           +-- main.spec.ts
|           +-- another-file.spec.ts // new file

Когда я снова запускаю его с

karma start karma.conf.js

В консоли появляются следующие ошибки

Error: [$injector:modulerr] Failed to instantiate module ngLocale due to:

То, что я сузил до этого, потому что я загружаю angular-mock более одного раза. Более того, у меня есть предупреждения о том, что AngularJS загружается также более одного раза.

В моих модульных тестах у меня есть следующий импорт

import "angular";
import "angular-mocks";

, который мне нужен, иначе он выиграл ' т построить.

Я надеюсь, что у меня возникла проблема, и надеюсь, что кто-нибудь поможет мне разобраться, как это исправить. Проблема, с которой я сейчас сталкиваюсь, заключается в том, как я могу изменить так, чтобы angular и angular-mock просто загружались один раз. Webpack, который создает и связывает мое приложение, также включает angular. Так что я предполагаю, что это также следует учитывать при возможном исправлении.

...