【问题标题】:Upgrade to Rails 4.2 breaks rspec feature specs - why?升级到 Rails 4.2 会破坏 rspec 功能规范 - 为什么?
【发布时间】:2014-12-22 18:30:38
【问题描述】:

我的模型和控制器规格运行良好,但升级到 rails 4.2 后,我使用 Capybara 的功能规格不再工作。示例:

#in spec_helper.rb:
def login_admin
  create(:user,
         first_name: 'John',
         last_name: 'Doe',
         email: 'doej@test.com',
         admin: true)

  visit root_path
  fill_in 'email', with: 'doej@test.com'
  fill_in 'password', with: 'password1'
  click_button 'Log in'
  puts 'created'
end

#in spec/features/albums_spec.rb
feature "Albums", :type => :feature do
  before(:each) do
    login_admin
  end

  scenario 'do something' do
    save_and_open_page
  end
end

当我运行这个规范时,它永远不会完成,无论是通过还是失败。没有错误被抛出;它只是坐在那里,显示带有光标下方的专辑。 'created' 永远不会被放入标准输出,并且页面永远不会由 save_and_open_page 调用启动。测试日志显示 erb 文件是由我的登录操作呈现的。这一切都在 rails 4.2 升级之前有效。

这只会在规范运行期间失败 - 在浏览器中使用该应用可以正常工作。

我在这里错过了什么?

【问题讨论】:

  • 作为升级的一部分,rspec 是否也得到了升级?
  • @Doon - 不,最晚已经出现了

标签: ruby-on-rails rspec capybara


【解决方案1】:

更新:可能与 capybara/rspec 相关的问题:

  1. 避免在功能规范中创建模型,因为它们是在不同的线程中创建的。相反,使用 capybara 步骤创建用户(即每次都“注册”用户)。

  2. 如果您确实需要以一种无法通过单击站点来创建的方式为场景准备的数据库,请在您的应用程序中实现一个简单的“管理”区域(无论如何您可能都需要一个)或管理 API 界面或类似 CSV 上传选项等。

  3. 否则,您可以搜索“capybara rspec database_cleaner append_after”以获取支持在功能规范中创建模型的设置,但我发现没有一个解决方案是真正的防弹。你可以试试:https://github.com/RailsApps/rails_apps_testing

我猜你的例子是/被卡在数据库操作上(等待其他线程中的数据库连接结束)。

以前的答案:

一些想法:

  1. 在 login_admin 方法中捕获异常并使用STDERR.puts 打印出来
  2. 删除 click_button 并查看它是否按预期失败(显示登录页面)
  3. 输入密码后添加sleep 4
  4. 将 click_button 分成 2 个调用(查看哪个挂起):

    btn = find(:button, locator, options)
    STDERR.puts "found: #{btn.inspect}"
    btn.click 
    
  5. 使用 bundle show capybara 找出它在哪里,编辑 find(或单击)方法并在那里放入 STDERR.puts 方法以查看问题所在

【讨论】:

  • 这可能是我没有正确使用 rspec 的问题。经过一些重构后,它现在可以正常工作了。不过,很好的故障排除技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 2018-01-23
相关资源
最近更新 更多