使用Capybara进行Select2功能测试

时间:2015-12-29 14:14:58

标签: ruby rspec capybara select2

我正在尝试用水豚写一个rspec功能测试,但是, 我对select2元素的测试有些麻烦。 看我的测试代码。 使用capybara进行特征测试

feature "Backend  Landing Pages" do

let!(:landing_page) { create(:landing_page, country: country) }
let!(:country) { create(:country, id: 2) }
let!(:restaurant) { create(:restaurant_with_locale) }
let!(:landing_page_restaurant) { create(:landing_page_restaurant,landing_page: landing_page, restaurant: restaurant) }

before(:each) do
login
click_on("Website")
click_on("Landing Pages")
end

scenario "user creates a landingpage", js: true  do
 first(:link,"netherlands").click
 fill_in "landing_page_domain", with: landing_page.domain
 fill_in "landing_page_slug_nl", with: landing_page.slug_nl
 fill_in "landing_page_slug_en", with: landing_page.slug_en
 fill_in "landing_page_header_title", with: landing_page.header_title
 fill_in "landing_page_title", with: landing_page.title
 attach_file "landing_page_header_image",( Rails.root + 'app/assets/images/site_builder/image3.jpg')
 page.find('#landing_page_restaurant_select').set('Le Garage - Amsterdam')
 page.save_screenshot ("test.png")
 click_on("Save")
 expect(page).to have_content("successfully created")
 expect(LandingPage.count).to eq 2
 expect(LandingPage.last.landing_page_restaurants.count).to eq 1

end

 scenario "user edits a LandingPage", js: true do
  click_on("Edit")
  expect(page).to have_content 'Edit landing Page '
  page.save_screenshot ("edit.png")
 end
end

我收到了下一个错误。

Failures:

  1) Backend  Landing Pages user creates a landingpage
  Failure/Error: expect(LandingPage.last.landing_page_restaurants.count).to eq 1

   expected: 1
        got: 0

   (compared using ==)
 # ./spec/features/backend/landing_pages_spec.rb:33:in `block (2 levels) in <top (required)>'

谁能看到我在这里做错了什么 无法弄清楚为什么餐厅没有连接到landingPages

提前致谢

1 个答案:

答案 0 :(得分:2)

在你提到的问题中,你使用的是select2,但是你在我认为是常规选择元素的基础上调用set。当您使用JS小部件时,他们通常会覆盖他们在其所在表单的提交事件中构建的隐藏元素的值。因此,您设置的值很可能被覆盖。而不是设置隐藏元素的值(大多数水豚驱动程序不允许这个特定原因 - 不确定您正在使用哪个驱动程序),您需要复制用户行为。从select2示例页面看来,select2小部件是从span元素和带有选项的ul列表构建的。因此,有些东西是

find('span.select2').click # the selector may need to be more specific to locate the exact span, without your html I don't know what that selector would be
find('li', text: 'Le Garage - Amsterdam').click

这会点击打开下拉列表的select2元素,然后点击带有正确文本的li元素 - 从而选择它。