Capybara没有运行自定义类(PORO)

时间:2015-11-20 22:08:03

标签: ruby ruby-on-rails-4 selenium capybara factory-bot

对于我的一个表单,我创建了一个普通的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

0 个答案:

没有答案