1

github で gem をリリースしたばかりで、aruba gem との統合テストを作成しました。ただし、コマンドラインとは動作が異なるため、機能を実行できません。

機能を実行すると、レールがジェネレーターを見つけることができません。コマンドラインで同じ手順を繰り返すと、問題なく実行されます。

これは失敗した機能です

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て出力をキャプチャすると、gem がバンドルにリストされていないことがわかりました。結果として、rails g --helpステップを書くと、私のジェネレーターはそこにありません。ただし、devise gem とジェネレーターは存在します (devise は私の gem の要件としてリストされています。そのため、バンドラー/レールが aruba ステップ内のすべてをロードしていないようです。

これは Aruba または Bundler のバグだと思います。aruba の問題をオープンしましたが、まだ回答がありません。

完全なコードはGithubにあります

私がすでに見た最後のことは、この解決策を試してみましたが、うまくいきませんでした

4

1 に答える 1

2

あなたが書いたすべてのステップの代わりに、キュウリでは少し非推奨です。

次のようなことを試してください:

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

ディレクトリへのリンクを作成する必要があります。キュウリを使用してテストを試みるべきではない bundle install を実行するよりも理にかなっています。

于 2012-01-26T12:39:34.907 に答える