Испытания генераторов с огурцом и арубой - PullRequest
1 голос
/ 04 июля 2011

Я только что выпустил гем на github и написал тест на интеграцию с гемом aruba. Однако я не могу запустить функции, потому что они ведут себя не так, как командная строка.

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

Это ошибочная функция

Background: A new rails application has been created with my gem
  Given a rails application named "my_app" exists
  And this gem is installed in that application

@announce
Scenario: Installation using default values
  When I successfully run `rails generate google_authentication:install`
  # this is needed because rails g returns 0 when can't find the generator
  And the output should not contain "Could not find generator"

И это код, который реализует фоновые шаги

Given /^a rails application named "([^\"]*)" exists$/ do |app_name|
  @app_name = app_name
  Given "I successfully run `rm -rf #{app_name}`" # added to ensure that the working directory is clean
  And "a directory named \"#{app_name}\" should not exist"
  And "I successfully run `rails new #{app_name}`"
  And "I cd to \"#{app_name}\""
end

When /^this gem is installed in that application$/ do
  gempath = File.expand_path('../../../', __FILE__)
  Given "I append to \"Gemfile\" with \"gem 'gem-name', :path => '#{gempath}'\""
  And "I successfully run `bundle check`"
end

Я попытался отладить и обнаружил, что если я изменил команду bundle check с помощью bundle install и перехватил вывод, мой драгоценный камень не будет указан в комплекте. Как следствие, если я напишу шаг rails g --help, мой генератор не будет там. Как бы то ни было, есть gem и генераторы devise (devise указан как требование в моем gem. Поэтому кажется, что bundler / rails не загружает все внутри шагов aruba.

Я думаю, что это ошибка с Aruba или Bundler, я открыл проблему для aruba , но до сих пор нет ответов.

Полный код включен Github

Последнее, что я уже видел и попробовал это решение но безуспешно

1 Ответ

2 голосов
/ 26 января 2012

Вместо всех написанных вами шагов, которые немного устарели в огурце.

Попробуйте что-то вроде этого:

Given /^a rails application named "([^\"]*)" exists$/ do |app_name|
  FileUtils.mkdir_p("tmp")
  system("rm -rf tmp/#{app_name}")
  system("rails new tmp/#{app_name}")
  system("ln -s ../../../lib/generators tmp/#{app_name}/lib")
  @current_directory = File.expand_path("tmp/#{app_name}")
end

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

...