我的模型和控制器规格运行正常,但在升级到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
当我运行此规范时,它永远不会完成,无论是通过还是失败。没有错误;它只是坐在那里,用下方的光标显示专辑。 '创建'永远不会被放到stdout,并且页面永远不会被save_and_open_page
调用启动。测试日志显示我的登录操作呈现的erb文件。这一切都在rails 4.2升级之前完成。
这仅在规范运行期间失败 - 在浏览器中使用该应用程序正常工作。
我在这里缺少什么?
答案 0 :(得分:2)
更新:与capybara / rspec相关的可能问题:
避免在要素规范中创建模型,因为它们是在不同的线程中创建的。相反,使用水豚步骤创建用户(即"注册"每次用户)。
如果您真的需要为点击场景而无法创建的数据库,请实施一个简单的" admin"您应用中的区域(您可能还需要一个)或管理API界面或类似CSV上传选项等。
否则,您可以搜索" capybara rspec database_cleaner append_after"对于支持在特征规范中创建模型的设置,但我发现没有一个解决方案真的是防弹的。您可以尝试:https://github.com/RailsApps/rails_apps_testing
我猜你的例子是/被卡在数据库操作上(等待其他线程中的数据库连接结束)。
以前的答案:
一些想法:
STDERR.puts
sleep 4
将click_button分成2个调用(查看哪个挂起):
btn = find(:button, locator, options)
STDERR.puts "found: #{btn.inspect}"
btn.click
使用bundle show capybara
查找它的位置,编辑查找(或点击)方法并在其中输入STDERR.puts方法以查看错误