Я пытаюсь проверить сгенерированный класс компонента, который использует React CSS modulesТест с мокко и ферментным РЕАКТОМ компонента, который использует Реагировать модули CSS
Вот пример Foo
компонент:
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './Foo.css';
const Foo = ({ className }) => <div styleName={className} />;
Foo.propTypes = {
className: React.PropTypes.string.isRequired,
};
export default CSSModules(Foo, styles, { allowMultiple: true, errorWhenNotFound: false });
Test код (Foo.spec.jsx
):
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import Foo from '../../../app/components/Foo';
describe('<Foo/>',() => {
it.only('should return a className prop as class value',() => {
const wrapper = shallow(<Foo className="bar" />);
console.log('DEBUG----->', wrapper.html());
});
});
Foo.css код:
.bar {
background-color: red;
}
А вот тест HTML выход:
DEBUG-----> <div></div>
Как вы можете видеть, что это создает пустой DIV без какого-либо класса, так что ни утверждение не работает.
Также я хотел бы рассказать о том, что это только терпит неудачу в тестировании, компонент генерирует ожидаемый класс html в созданном веб-приложении html-коде.
Любая идея, как исправить это?
UPDATE
Как было предложено в комментарии по Fabio Я попытался удалить опцию errorWhenNotFound: false
Теперь тест дает следующее сообщение об ошибке:
Error: "bar" CSS module is undefined.
Что я дон Не понимаю, поскольку класс bar определен в файле Foo.css
.
Также я обнаружил, что если я отлаживать стили в Foo
компонента:
import styles from './Foo.css';
console.log('STYLES', styles);
Она возвращает пустой результат:
STYLES {}
Хотя и в этом упрощенном примере, так и в полной мере он генерирует ожидаемый класс html в созданном веб-приложении html-коде, при этом соответствующие стили работают нормально.
Если вы используете Webpack, у вас есть тест конкретной конфигурации/погрузчики, игнорирующие импортированные файлы CSS? Возможно, CSSModules не находит это имя класса, и ошибка игнорируется '' 'errorWhenNotFound: false''' (который вы также можете попытаться удалить, чтобы помочь отладить проблему). –
Итак, теперь мы хотя бы знаем, почему вы не видите класс на выходе. Я все еще думаю, что у вас есть какая-то связанная с тестированием конфигурация или код, который игнорирует содержимое файла css, примерно так: https://www.npmjs.com/package/ignore-styles, который довольно часто используется в тестах. Можете ли вы опубликовать полную конфигурацию webpack, которую вы используете для тестов? Используете ли вы мокко как тест-бегун? Вы пытаетесь сделать что-либо, связанное с этим https://github.com/airbnb/enzyme/issues/202? –
Я думаю, вы попали в джек-пот !. Mocha выполнялось с опцией «игнорировать-стили», теперь, когда это исправлено, генерируется следующее сообщение об ошибке: «SyntaxError: /var/www/web/app/components/Icon.css: должны быть прикреплены ведущие декораторы к объявлению класса Но по крайней мере сейчас это другая проблема. – rfc1484