我有这个集成规范:
feature "When buying a deal, a user" do
let(:current_market) { Factory.create(:market) }
let(:deal) { Factory.create(:deal_with_products, market: current_market) }
scenario "can change quanitity and see an updated total" do
visit_checkout_for_product deal.products.first
# ...
end
# ...
end
def visit_checkout_for_product(product)
visit deal_path current_market, product.deal
choose product.title
click_button 'buy now'
end
这与RackTest
完美配合,但当我将规格更改为:
scenario "can change quanitity and see an updated total", js: true do
visit_checkout_for_product deal.products.first
# ...
end
我的测试中断,给我一个500 Internal Server
错误,如下所示:
我无论如何都无法找到堆栈跟踪,但我有理由相信nil:NilClass
应该是之前定义的deal
let变量。
我无法理解的是为什么这对RackTest
来说根本不是问题...是否有一些我在这里缺少的额外配置?
我正在使用RSpec 2.8.0
和Rails 3.1.1
。如果您需要查看任何其他文件,请与我们联系。
答案 0 :(得分:3)
问题是database_cleaner,由于在Selenium / capybara-webkit测试运行之前擦除了我的测试数据,因此未正确配置。这是我现在正在使用的配置,它允许所有内容通过:
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:each) { DatabaseCleaner.start }
config.after(:each) { DatabaseCleaner.clean }
end