对于我的一个表单,我创建了一个普通的ruby-object对象来为select表单提供数据。
class SearchFields
def types
Card.select(:types).order('types ASC').uniq.collect.each do |c|
if c.types.nil?
next
else
types = c.types.delete("[:&,\"]").split().join(" ")
[types, c.types]
end
end
end
end
在我的控制器中,我这样调用方法:
def index
@card_types = SearchFields.new.types
end
在我看来(这是部分的):
<%= f.label :types_cont, "Type" %>
<%= f.select :types_cont, @card_types, {include_blank: true} %>
这是我的规格:
feature "User uses Advanced Card Search", js: true do
let!(:card) { create(:card) }
background do
visit cards_path
expect(page).to have_content("Search for cards you would like")
click_on "Advanced Search"
fill_in("cards_autocomplete_name", with: card.name)
select(card.cmc, from: "q_cmc_gteq")
select(card.cmc, from: "q_cmc_lteq")
select(card.colors, from: "q_colors_cont")
select(card.types, from: "q_types_cont") # here is where it fails
fill_in("q_printings_cont", with: card.printings)
select(card.legalities, from: "q_legalities_cont")
click_on "card-search-submit"
expect(page).to have_css("#cards-table td#card-name")
end
scenario "and successfully finds card" do
expect(page.first('#cards-table td#card-name').text).to eq(card.name)
end
end
我使用Selenium运行Capybara来运行我的测试,但是当部分渲染时,选择表单不包含任何数据。 Card
对象是使用FactoryGirl创建的,我知道它已成功创建,因为之前的测试有效。
似乎正在发生的事情是没有创建SearchFields对象。如果我在控制台中键入@card_types,则返回nil
。
有谁知道这里发生了什么以及为什么没有创建对象?任何信息将非常感谢! :)
更新 这是database_cleaner.rb文件:
RSpec.configure do |config|
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
end
config.after(:each) do
DatabaseCleaner.clean
end
end