Обработка импорта CSS WebPack при тестировании с помощью Mocha и Babel
При тестировании файлов .js
, которые имеют импорт Webpack CSS, например import './style.css'
, Mocha выдает синтаксическую ошибку (потому что он пытается импортировать и анализировать файл CSS как JS). Существует решение для которое уже было опубликовано в Stack Overflow, но оно адресовано только в том случае, если вы еще не используете компилятор с Mocha. Я использую Babel 5. Я пробовал следующее, но кажется, что Mocha не поддерживает передачу нескольких компиляторов:
// npm test script
mocha ./src/**/*Test.js --compilers css:./scripts/mocha-webpack-compiler.js js:babel/register
// scripts/mocha-webpack-compiler.js
function noop() {
return null;
}
require.extensions['.css'] = noop;
Есть ли способ иметь несколько компиляторов Mocha или лучший способ сказать Mocha не пытаться проанализировать импорт Webpack CSS?
EDIT:
Мне нравится предлагаемое решение @Giles B ниже; это было именно то, что мне нужно. Однако, так как я все еще на Вавилоне 5, мне нужно было несколько настроек, как показано ниже:
mocha.opts
--require scripts/support/babelhook
--require scripts/support/mocha-webpack-compiler
Сценарии /babelhook.js
require('babel/register');
Сценарии/мокко WebPack-compiler.js
function noop() {
return null;
}
require.extensions['.css'] = noop;
mocha script
mocha ./src/**/*Test.js
Это работает для меня с помощью babel
и babel-core
, как версии 5.8.23
.
Ответы
Ответ 1
Я столкнулся с той же проблемой и просто получил ее работу, поэтому в моем файле mocha.opts я добавил следующие вызовы require
:
--require test/babelhook
--require test/css-null-compiler
В babelhook.js
У меня есть инструкция для загрузки babel:
// This file is required in mocha.opts
// The only purpose of this file is to ensure
// the babel transpiler is activated prior to any
// test code, and using the same babel options
require("babel-register")();
Затем из ссылки, которую вы предоставили, я устанавливаю css-null-compiler.js
следующим образом:
// Prevent Mocha from compiling class
function noop() {
return null;
}
require.extensions['.css'] = noop;
require.extensions['.scss'] = noop;
Надеюсь, что это поможет.
Ответ 2
Основываясь на ответе @Giles выше, это то, что я использовал для работы над Babel 6
package.json
"scripts": {
"test": "mocha --compilers js:babel-core/register
--require ./tools/testHelper.js 'src/**/*[email protected](js|jsx)'",
инструменты /testHelper.js
// Prevent mocha from interpreting CSS @import files
function noop() {
return null;
}
require.extensions['.css'] = noop;
Это позволяет проводить тесты внутри вашей папки src вместе с вашими компонентами.