Платформо-зависимые самоцветы для автотестов с упаковщиком - PullRequest
7 голосов
/ 12 апреля 2011

В проекте rails, над которым я работаю, я вставил поддержку rspec, cucumber и autotest с этим Gemfile (частично)

gem 'rspec-rails'
gem 'cucumber-rails'
gem 'autotest-standalone'
gem 'autotest-rails-pure'
gem 'zentest-without-autotest'

однако, чтобы запустить тесты с автотестом, мне нужно выполнить bundle exec autotest, в противном случае произойдет сбой с этим сообщением

$ autotest 
loading autotest/cucumber_rails_rspec_rspec2
Error loading Autotest style autotest/cucumber_rails_rspec_rspec2 (no such file to load -- autotest/cucumber_rails_rspec_rspec2). Aborting.

Сейчас я работаю на Mac и хочу включить гем autotest-growl и autotest-fsevents, но если я добавлю эти строки в мой ~/.autotest

require 'autotest/growl'
require 'autotest/fsevent'

тогда мне нужно вставить соответствующие гемы в Gemfile, и все работает, но он ломает сборки на моем CI-сервере (который находится в Linux)

Как решить эту проблему, не поддерживая другой Gemfile для локальных сред и сред CI?

EDIT:

На данный момент я решил с этими строками в Gemfile

if RUBY_PLATFORM.downcase.include?("darwin") # I'm on Mac
  gem 'autotest-fsevent'
  gem 'autotest-growl'
end

Он работает как локально, так и на CI-сервере, я не знаю, если он что-то испортил, на данный момент он работает безупречно.

Любой более чистый способ сделать это по-прежнему приветствуется.

EDIT2:

Я переключился на группы решений. Хотя предыдущий monkeypatch работает довольно хорошо как в разработке, так и для непрерывной интеграции, он даст вам ошибку в работе, если вы будете использовать задачи упаковщика capistrano для развертываний или если вы используете опцию bundle install --deployment (рекомендуется в производстве)

При использовании строки if RUBY_PLATFORM.downcase.include?("darwin") вы получите эту ошибку при развертывании.

# bundle install --deployment --without development test
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

You have deleted from the Gemfile:
* autotest-fsevent
* autotest-growl

Таким образом, мое окончательное решение этой проблемы состоит в том, чтобы включить гемы, специфичные для платформы, в заданную группу, скажем, osx, а затем в рабочей среде и на сервере CI исключить ее с помощью комплекта.

Если вы используете Capistrano для развертывания, укажите это в config.rb

set :bundle_without,  [:development, :test, :osx]
# capistrano bundler task
require "bundler/capistrano"

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Возможно, вы захотите использовать группы в своем gemfile, например:

group :development do
  gem "autotest-growl"
  gem "autotest-fsevents"
end

и на используемом сервере: $ bundle install --without development

0 голосов
/ 12 апреля 2011

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

Ваша локальная коробка может быть в разработке, а CI-сервер - ваша «рабочая» среда.

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

Редактировать: Извините, я думаю, я слишком быстро отсканировал ваш пост. Но вы можете добавить ~/.autotest к .gitignore, чтобы он не был включен на ваш CI-сервер.

...