2015-12-29 4 views
-1

Я пытаюсь написать тест функции rspec с capybara, но У меня есть некоторые проблемы с тестом на элементе select2. см. Мой тестовый код. Использования теста функции с водосвинкойТест выбора 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

заранее спасибо

+0

Что представляет собой ваше лог-шоу для создания действия? –

ответ

1

В вопросе вы упоминаете вы используете ВЫБ.2, но затем вы вызываете set на том, что я предполагаю, является регулярным элементом select. Когда вы используете виджеты JS, они часто перезаписывают значения скрытых элементов, которые они строят, на событие отправки формы, в которой они находятся. Из-за этого, вероятно, значение, которое вы устанавливаете, становится переопределенным. Вместо того, чтобы устанавливать значения скрытых элементов (которые большинство драйверов capybara не допускают этой конкретной причины - не уверены, какой драйвер вы используете), вам необходимо реплицировать поведение пользователей. На странице примеров 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 

это будет нажать на ВЫБ.2 элемент открытия в раскрывающемся списке, а затем нажмите на элемент LI с правильным текстом - тем самым выделив его.

+0

Большое спасибо, это работает отлично! – PatrickLoeve

+0

@ user3792875 рад слышать, пожалуйста, примите ответ. –