Эта статья научит вас настроить карму для тестирования компонентов REVENTJS. Это было первоначально опубликовано на Кодаментатор Джастин Ву ‘s Блог Отказ
Бесполезный фон
Около 8 месяцев назад я начал оглянуться за решения для того, чтобы тестировать реагировать компоненты, но не имели никаких хороших идей. Я сначала попробовал qunit, который, казалось, работал нормально, но я хотел, чтобы он был запущен автоматически. Я попробовал qunit Runner вроде как как проект Ember.js, используемый для проведения тестов, но это тоже оказалось слишком громоздким.
Я переключился в карму, чтобы проверить мои компоненты и провел свое время, создавая свои тестовые активы и загружая их до кармы, но это заканчивалось тем, что они были вроде медленного, потому что я никогда не кэшировал сборки и запустил чистый веб-папат для каждого пакета. Фу. Facebook продолжал выпустить шутки, и я переключился. Я думал, что это здорово, но я быстро побежал в некоторые проблемы:
- Мне не нравится издеваться над модулем, который заставляет вещи выглядеть черными коробками
- Я никогда не хотел/нуждался в черном боксе
- Это было медленно
- Он не установил на всех компьютерах моих сверстников без проблем
- Документация отсутствовала
- Я должен был придумать хаковый способ называть это от узла
- Это не сработало с IO.js, когда я впервые попробовал
- Я действительно не знал, как отлаживать свои тесты, отличные от действительно длинных следов стека, и самая большая вещь, которую мне не понравилось, это
- Это не запустилось в реальном браузере
Это сообщение существует, потому что:
- Ребята, написание React-Reacter – боги
- Каждый другой пост в блоге на тестировании компонентов реагирования, которые я видел, был супер более сложный
- Потому что эта настройка – лучшее, что я нашел, RT реагирует с чистого рендеринга
Как это выглядит, когда вы закончили это?
Почему я хочу этого?
Когда тестирование и отладки с полными SourceMaps были это легко?
Хорошо, как я могу это получить?
Монтаж
Зависимости, которые вам, вероятно, понадобится:
- карма – фактический тестовый бегун
- Карма-Кли – CLI для кармы
- Карма-Моча – для использования тестовой структуры Mocha с кармой
- KARMA-WEBPACK – для использования WebPack, чтобы фактически предпроцитировать источники для кармы
- Карма-SourceMap-погрузчик – для загрузки SourceMaps в карму
- карма-хромированная установка – для запуска хрома
- Ожидайте – Майкл Джексон (не путать с известной певцом/танцором) Удивительно приятная библиотека утверждения
- Babel-Loader – или какой-то погрузчик для ваших файлов JSX
- Реагируйте – ну, это то, что вы используете, верно?
- WebPack – WebPack, самый удивительный инструмент сборки браузера
Конфигурация
Карма читает из karma.conf.js
Файл, так что давайте убедитесь, что мы настроим это правильно.
karma.conf.js.
var webpack = require('webpack'); module.exports = function (config) { config.set({ browsers: [ 'Chrome' ], //run in Chrome singleRun: true, //just run once by default frameworks: [ 'mocha' ], //use the mocha test framework files: [ 'tests.webpack.js' //just load this file ], preprocessors: { 'tests.webpack.js': [ 'webpack', 'sourcemap' ] //preprocess with webpack and our sourcemap loader }, reporters: [ 'dots' ], //report results in this format webpack: { //kind of a copy of your webpack config devtool: 'inline-source-map', //just do inline source maps instead of the default module: { loaders: [ { test: /\.js$/, loader: 'babel-loader' } ] } }, webpackServer: { noInfo: true //please don't spam the console when running in karma! } }); }; Next, we need our single file, which will actually use the webpac
Далее нам нужен наш единственный файл, который фактически использовал WebPack требует API для поиска файлов, которые нам нужны автоматически.
Testswebpack.js.
var context = require.context('./src', true, /-test\.js$/); //make sure you have your directory and regex test set correctly! context.keys().forEach(context);
Напишите некоторые тесты
Тесты действительно просто нужно доказать такие вещи, как 1
Так что давайте убедитесь, что это легко понять.
var React = require('react'); var TestUtils = require('react/lib/ReactTestUtils'); //I like using the Test Utils, but you can just use the DOM API instead. var expect = require('expect'); var Root = require('../root'); //my root-test lives in components/__tests__/, so this is how I require in my components. describe('root', function () { it('renders without problems', function () { var root = TestUtils.renderIntoDocument(); expect(root).toExist(); }); });
Запустите тесты!
Просто простой Карма начать
запустит тесты один раз. Карма начать
для нескольких прогонов.
Заключение
И это об этом! Довольно минимальная конфигурация, чтобы получить действительно приятную среду тестирования. Большое благодаря ребятам React-Router для того, чтобы иметь это на Github, чтобы следовать.
Рекомендации
Реагистрационный маршрутизатор – https://github.com/rackt/react-router/ Карма – http://karma-runner.github.io/0.12/index.html React Testutils – http://facebook.github.io/react/docs/test-utils.html Мой пример репо – https://github.com/justinwoo/react-karma-webpack-testing/
Бонус
Заработав эту работу с Трэвисом тривиальна. Просто сделайте несколько вещей.
Изменить, какой браузер будет работать в TRAVIS
Трэвис приходит только с Firefox, поэтому мы должны изменить это соответственно.
Установите Launcher Firefox, Карма-Firefox-Launcher
, а затем изменить свою карму конфигурацию соответственно Браузеры: [Процесс.env.Continuce_integration? «Firefox»: «Chrome»],
Отказ Вы также можете использовать Phantomjs, если вы действительно хотите, используя правильный погрузчик.
Настроить TRAVIS.
Добавить .travis.yml
с соответствующими настройками. Вам придется начать xvfb
в Трэвисе соответственно, чтобы сделать работу Firefox.
Travis.yml.
language: node_js node_js: - "0.10" before_install: - "exportDISPLAY=:99.0" - "sh-e/etc/init.d/xvfbstar
И тогда вы добруетесь!
См. Трэвис в действии в моем демократии: https://github.com/justinwoo/react-karma-webpack-testing (Журнал сборки здесь: https://travis-ci.org/justinwoo/react-karma-webpack-testing/builds/51681700 )