我刚刚在 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
我已经看到并尝试过这个解决方案但没有运气的最后一件事