以下是Rails 4.2引擎中用于我们规范的宝石。
s.add_development_dependency "sqlite3"
s.add_development_dependency "rspec-rails", ">= 3.2.0"
s.add_development_dependency "factory_girl_rails", '~>4.5'
s.add_development_dependency 'capybara'
s.add_development_dependency 'launchy'
以下是创建订单记录的集成规范:
visit multi_item_orderx.orders_path(customer_id: @kustomer.id)
click_link 'New Cob Order'
expect(page).to have_content('New Order')
fill_in 'order_order_date', :with => 10.days.ago
fill_in 'order_order_total', :with => 50
fill_in 'order_cob_info_bonding_product', :with => 'a bonding prod'
fill_in 'order_cob_info_name', :with => 'storage'
fill_in 'order_cob_info_qty', :with => 10
fill_in 'order_cob_info_unit_price', :with => 10
click_button 'Save'
expect(CobOrderx::CobInfo.count).to eq(1)
问题在于CobOrderx::CobInfo.count returns 0
而不是1
。在调试中,@order
已成功保存,CobOrderx::CobInfo.count
将返回1
。
但回到规范中:
expect(CobOrderx::CobInfo.count).to eq(1)
返回false
,因为.count
为0
。我们尝试在rails_helper
中设置以下内容,但它不起作用:
config.use_transactional_fixtures = false
问题似乎与规范(水豚)有关,我们不确定原因。什么可能导致db记录在集成测试中丢失?
答案 0 :(得分:2)
未能在capybara
中搜索已创建记录的最可能原因是工厂女孩或对db的直接访问使用与capybara不同的连接,因此在一个会话中创建的数据在另一个会话中不可用。要解决此问题,请使用single connection patch(将其设置为规范/支持):
require 'active_record'
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection ||= retrieve_connection
end
end
不要忘记将其纳入 rails_helper.rb 。
如果它无法帮助您,您可以尝试在有关该主题的其他讨论中找到答案,该讨论可用here。