Подтвердить что ты не робот

Тестирование большого 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 - я хочу испытать удобное приложение.

Я был бы признателен за любое предложение по решению этой задачи.

4b9b3361

Ответ 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.