【发布时间】:2014-12-19 14:30:11
【问题描述】:
我正在尝试在规格之间清理我的数据库。所以我决定使用流行的 gem database_cleaner。 现在的问题是,当我使用 FactoryGirl 创建模型的新实例时,它已创建但未显示在页面中。
这是我的 spec_helper:
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/rspec'
require 'factory_girl_rails'
require 'pry'
require 'database_cleaner'
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.include FactoryGirl::Syntax::Methods
config.order = :random
Kernel.srand config.seed
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each, type: :feature) { DatabaseCleaner.strategy = :truncation }
config.before { DatabaseCleaner.start }
config.after { DatabaseCleaner.clean }
end
我正在尝试运行的简单测试是这个:
require 'spec_helper'
feature 'designs' do
feature 'editing designs' do
before(:each) { visit designs_path}
given!(:design){ create(:design)}
scenario "from the designs index" do
binding.pry
expect(page).to have_content("Ninja Crane")
end
end
end
我使用 binding.pry 来检查设计数量并查看页面。结果是设计被正确创建但没有显示在页面中。
提前致谢!
【问题讨论】:
-
可能您在创建对象之前访问了该页面
-
我添加了一个睡眠,同样的情况发生了。我认为这不是问题。
-
这不是睡觉的问题。为什么要解决你的问题?在块
before(:each) { visit designs_path}内放置一个binding.pry并检查此时designs表是否包含数据 -
你完全正确。这解决了我的问题。我只需要更改访问和给予之间的顺序!无论如何,我不明白。我认为它会访问页面,创建对象,然后运行我要求内容的场景。
标签: ruby-on-rails rspec factory-bot database-cleaner