Dav*_*ite 23 ruby rspec ruby-on-rails capybara capybara-webkit
我有一个JS功能规范,我正试图与Capybara Webkit一起运行.但它似乎无法找到我的数据库记录.
有问题的规范看起来像这样
it "should allow pledging to a Hardback level", js: true do
book = FactoryGirl.create :book
visit book_path(book)
click_link "pledge-btn"
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,book_path(book)404s 的请求因为无法找到该书.
如果我取下:js旗帜,测试通过.
我建议DatabaseCleaner使用:truncationJS规范作为推荐的方法.
# spec/support/database_cleaner.rb
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
DatabaseMetadata.create!(:sanitized_at => DateTime.now)
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Run Code Online (Sandbox Code Playgroud)
我可以puts在测试中找到这本书,它会被发现.
it "should allow pledging to a Hardback level", js: true do
book = FactoryGirl.create :book
visit book_path(book)
p Book.first
# => .. the book instance
click_link "pledge-btn"
end
Run Code Online (Sandbox Code Playgroud)
我也试过这个共享连接方法似乎也没有解决问题.
还有什么可能是错的?
你可能已经config.use_transactional_fixtures = true设置了spec_helper.rb.这会覆盖你上面的内容.
您想要从您的行中删除此行spec_helper.rb或将其更改为false.
我遇到了同样的问题并且有一个非常相似的配置.在查看DatabaseCleaner自述文件后,我发现了这个小注:
它还建议用于
append_after确保在安装后测试清理后DatabaseCleaner.clean运行capybara/rspec.
这意味着改变你的
config.after(:each) do
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
至
config.append_after(:each) do
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
请注意append_after而不是after.这解决了我的问题.
小智 5
处理遗留项目我遇到过这样的问题,这是因为将DatabaseCleaner策略切换为:截断如下:
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
Test::Seeder.seed!
DatabaseCleaner.strategy = :transaction
end
Run Code Online (Sandbox Code Playgroud)
所以,删除DatabaseCleaner.strategy = :transaction帮助我的情况