Тестирование большого JS-приложения - исключение нескольких файлов karma.conf.js
Я использую карму + жасмин + phantom для тестов без проверки Javascript.
Проблема заключается в том, что у меня есть действительно большое приложение, состоящее из множества модулей JS, которые я хочу протестировать. Поэтому мне нужны пользовательские макеты для каждого случая, а для каждого из них - пользовательский.
karma.conf.js
позволяет мне иметь массив files
, который состоит из шаблонов для всех файлов, которые будут включать в себя, что является БОЛЬШИМ, если мое приложение будет небольшим, а не большим приложением с тоннами файлов и модулей.
Мое решение - создайте несколько файлов karma.conf.js
для каждого тестового примера. Но это действительно отстой, так как много конфигурационных файлов - это большой вздутие, и если я захочу изменить один параметр (например, autoWatch), мне нужно будет изменить все файлы конфигурации.
My другое решение - написать собственный обработчик перед karma.conf.js
для обработки дополнительных параметров (специфицировать файл или папку для обхода кармы для поиска его конфигурационного файла) и просто построить массив files
динамически.
Теперь проблема, которую я вижу в этом, заключается в том, что карма работает только один раз, и я буду ограничен, чтобы запускать одну тестовую спецификацию... и Я НЕ ХОЧУ ИЗМЕНИТЬ КАРМА СЕБЯ.
Я также рассмотрел использование Grunt, но не нашел способ заставить его работать для нескольких тестовых случаев.
Кстати, моя идеальная структура была бы такой:
иметь файлы:
test/specs/category/unit1_spec.js
test/mocks/category/unit1_mock.js
конфигурационный файл:
files: [
{
'includes': [array_of_includes],
'spec': 'spec_file'
}
]
mock файл будет автоматически захвачен из соответствующего каталога mocks.
и я мог бы сделать karma start test/specs/category
, и он будет рекурсивно запускать все тестовые примеры внутри папки.
tl; dr - я хочу испытать удобное приложение.
Я был бы признателен за любое предложение по решению этой задачи.
Ответы
Ответ 1
grunt-karma звучит идеально для ваших нужд.
Это многозадачность grunt, которая позволяет подзадачам иметь общую конфигурацию, которая может быть переопределена конкретными подзадачами.
Плагин объединяет конфигурацию Karma в один файл.
Например:
karma: {
options: {
configFile: 'karma.conf.js',
runnerPort: 9999,
browsers: ['Chrome', 'Firefox']
},
category1: {
files: ['app/js/category1/**/*.js', 'test/category1/*.js']
},
category2: {
files: ['app/js/category2/**/*.js', 'test/category2/*.js']
}
}
Ответ 2
Используйте переменную ENV для передачи аргумента файлам в файле karma.conf.js:
files: [
include1, include2, ..., includeN,
process.env.JS_TESTS + "/*.js"
]
Затем выполните следующую карму:
JS_TESTS=test/category2 karma start karma.conf.js
Ответ 3
Вы можете использовать инструкции require в конфигурационных файлах кармы.
например, в вашем файле конфигурации кармы, который вы могли бы сделать:
files: require('./karma.conf.files')
Для более полного ответа.. Я нашел другое решение по этой ссылке: https://groups.google.com/forum/#!topic/karma-users/uAf7TuVBmCQ
С кармой 0,8 (стабильный ток)
// shared_conf.js
module.exports = {
port: 8080
};
// karma1.conf.js
var shared = require('./shared_conf.js');
port = shared.port;
С кармой 0,9 (в настоящее время в канадском выпуске):
// shared_conf.js
module.exports = function(karma) {
karma.configure({
port: 8080
});
};
// karma1.conf.js
var shared = require('./shared_conf.js');
module.exports = function(karma) {
shared(karma);
karma.configure({
// override
});
};
Это помогло мне собрать массив имен файлов из отдельного файла конфигурации.
Ответ 4
Я заметил, что любой аргумент, который вы передаете в командной строке, получает этот аргумент camelCased в исходном файле конфигурации.
> karma start i-wanna-debug
module.exports = function (config) {
config.set({
singleRun: config.iWannaDebug ? false : true
});
};
Это позволяет использовать один конфигурационный файл Karma с несколькими конфигурациями.
Ответ 5
Я создал вспомогательную библиотеку, которая помогает вам управлять списками файлов и создавать конфигурации Karma/Mocha/Wallaby. Вы можете использовать его в сочетании с предлагаемыми решениями.
См. https://www.github.com/fvanwijk/testRunnerConfig.