У меня есть 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
. Так что я предполагаю, что это также следует учитывать при возможном исправлении.