2017-02-13 8 views
0

Я пытаюсь использовать webpack для объединения тестов в пакет, который я могу передать непосредственно на mocha. Мой WebPack конфигурации выглядит примерно так:Требование тестовых файлов с webpack для использования с моккой или аналогичным

module.exports = { 
    entry: ..., 

    output: ..., 

    module: { 
    rules: [ 
     { 
     test: /\.jsx?(.erb)?$/, 
     exclude: /node_modules/, 
     loader: 'babel-loader', 
     options: { 
      presets: [ 
      'react', 
      [ 'latest', { 'es2015': { 'modules': false } } ] 
      ] 
     } 
     } 
    ] 
    }, 

    plugins: [], 

    resolve: { 
    extensions: [ '.js', '.jsx' ], 
    modules: [ 
     path.resolve('../app/javascript'), 
     path.resolve('../vendor/node_modules') 
    ] 
    }, 

    resolveLoader: { 
    modules: [ path.resolve('../vendor/node_modules') ] 
    } 
} 

(от https://github.com/rails/webpacker)

Моя точка входа выглядит так, что я видел ссылки на других:

var context = require.context('../path/to/tests', true, /.+\.test\.js?$/); 
context.keys().forEach(context); 
module.exports = context; 

Сейчас это работает, и производит пучок, скажем, tests.js, который я могу передать мокко:

$ mocha tests.js 

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

Изменение моей точки входа на что-то вроде:

require('../path/to/tests/foo.test.js'); 
require('../path/to/tests/bar.test.js'); 
require('../path/to/tests/baz.test.js'); 
... 

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

ответ

0

Webpack перекомпилирует ваши тесты, потому что вы используете require.context. Документы для его использования: here. Обычно, когда вы запускаете серию тестов с моккой, вы можете просто использовать mocha ../path/**.test.js для запуска всех из них. Это, конечно, не будет работать, если вы используете новые функции из js, которые не поддерживаются узлом.

Один из способов обойти это - передать параметры компилятора мокко, и он будет использовать babel под капотом. Более подробное объяснение можно найти на this blog post. Общая идея - запустить mocha с --compilers js:babel-core/register, который находит ваш файл .babelrc.

Если вы находитесь на mac или linux, вы можете использовать следующую команду, чтобы написать выражение bash, чтобы найти все ваши тесты немного проще.

find ./path -name '*.test.js' | xargs mocha