1

我刚刚在 github 上发布了一个 gem,我用 aruba gem 编写了集成测试。但是我无法运行功能,因为它的行为与命令行不同。

如果我运行功能 rails 找不到我的生成器,如果我在命令行上重复相同的步骤,它们会完美运行。

这是一个失败的功能

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步骤,我的生成器就不存在了。但是设计 gem 和生成器在那里(设计在我的 gem 中被列为要求。所以似乎 bundler/rails 没有在 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

您必须创建指向目录的链接。这比进行捆绑安装更有意义,您不应该尝试使用黄瓜进行测试。

于 2012-01-26T12:39:34.907 回答