Мокко тестирование не удалось из-за css в webpack



Я новичок в мокко, и я пытаюсь использовать его для тестирования простого компонента React. Тест будет проходить, если компонент react не имеет никакого стиля CSS, но выдает синтаксическую ошибку, если тег в компоненте React содержит любое имя класса:



тестирование.реагировать.js



import React from 'react';

export default class Testing extends React.Component {
render() {
return (
<section>
<form>
<input type="text" />
</form>
</section>
);
}
}


тестирование.jsx



import {
React,
sinon,
assert,
expect,
TestUtils
} from '../../test_helper';

import TestingSample from '../../../app/components/Testing.react.js';

describe('TestingSample component', function(){
before('render and locate element', function(){
var renderedComponent = TestUtils.renderIntoDocument(
<TestingSample />
);

var inputComponent = TestUtils.findRenderedDOMComponentWithTag(
renderedComponent, 'input'
);

this.inputElement = inputComponent.getDOMNode();
});

it('<input> should be of type "text"', function () {
assert(this.inputElement.getAttribute('type') === 'text');
});
})


тест пройдет:



> mocha --opts ./test/javascripts/mocha.opts --compilers js:babel/register --recursive test/javascripts/**/*.jsx


TestSample component
✓ <input> should be of type "text"


1 passing (44ms)


после того, как я добавил имя класса внутри входного тега появляется ошибка:



import React from 'react';
import testingStyle from '../../scss/components/landing/testing.scss';

export default class Testing extends React.Component {
render() {
return (
<section>
<form>
<input type="text" className="testingStyle.color" placeholder="Where would you like to dine" />
</form>
</section>
);
}
}


результат теста:



SyntaxError: /Users/../../../Documents/project/app/scss/components/landing/testing.scss: Unexpected token (1:0)
> 1 | .color {
| ^
2 | color: red;
3 | }


Я искал в интернете, но пока безуспешно. Я что-то упустил? Пожалуйста, помогите мне или укажите мне правильное направление будет очень признателен.
В настоящее время я использую:

Node Express Server

Реагировать

Реагировать-маршрутизатор

Webpack

Бабель

Мокко

Чай

Синон

Синон-Чай

576   7  

7 ответов:

есть babel/register стиль крюк, чтобы игнорировать импорт стиля:

https://www.npmjs.com/package/ignore-styles

установить его:

npm install --save-dev ignore-styles

запуск тестов без стилей:

mocha --require ignore-styles

вы можете использовать компиляторы css запустить mocha, компилятор js следующим образом:

css-dnt-компилятор.js

function donothing() {
  return null;
}

require.extensions['.css'] = donothing;
require.extensions['.less'] = donothing;
require.extensions['.scss'] = donothing;
// ..etc

и выполните команду mocha следующим образом:

mocha --compilers js:babel-core/register,css:css-dnt-compiler.js --recursive

мой же ответ, как здесь, это то, что я использовал, чтобы работать на Вавилоне 6

пакета.json

"scripts": {
  "test": "mocha --compilers js:babel-core/register 
          --require ./tools/testHelper.js 'src/**/*-spec.@(js|jsx)'",

инструменты/testHelper.js

// Prevent mocha from interpreting CSS @import files
function noop() {
  return null;
}

require.extensions['.css'] = noop;

это позволяет вам иметь ваши тесты внутри вашей папки src вместе с вашими компонентами. Вы можете добавить столько расширений, сколько вы хотели бы с require.увеличение.

Так как вы используете webpack, используйте null-loader загрузить null когда webpack встречает необходимый файл CSS/LESS/SASS / etc в ваших компонентах. Установите через npm, а затем обновите конфигурацию webpack, чтобы включить загрузчик:

{
    test: /(\.css|\.less|.\scss)$/,
    loader: 'null-loader'
}

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

для тех, кто ищет, как справиться с этим в jest - вы просто добавляете обработчик для файлов стилей:

// package.json
{
  "jest": {
    "moduleNameMapper": {
      "\.(css|less|scss|sass)$": "<rootDir>/__mocks__/styleMock.js"
    }
  }
}

// __mocks__/styleMock.js
module.exports = {};

больше здесь.

ни одно из этих решений не работало для меня, так как я использую mocha-webpack, и он не принимает переключатель "--compilers". Я реализовал пакет ignore-styles, как описано в самом популярном ответе, но он казался инертным, без разницы в моем отчете о освещении Стамбула (.меньше файлов все еще тестируется).

проблема .меньше загрузчика, который я использовал в своем веб-пакете.конфиг.тест.js файл. Просто замена less-loader на null-loader исправлена моя проблема.

module: {
    rules: [
        {
            test: /\.less$/,
            use: ['null-loader']
        }
    ]
}

для меня это, безусловно, самое простое решение и нацелено на мою конфигурацию тестирования напрямую, а не на изменение/добавление в пакет.сценарии json, или еще хуже, добавляют новые .JS файлы.

один простой способ-импортировать 'ignore-styles'; в ваших тестовых классах..

Comments

    Ничего не найдено.