0

カピバラでrspec機能テストを書こうとしていますが、select2要素のテストに問題があります。私のテストコードを見てください。カピバラでの機能テストの使用

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)>'

ここで私が何を間違っているかを誰が見ることができますか?レストランがランディングページに接続されていない理由を理解できません

前もって感謝します

4

1 に答える 1

3

あなたが言及した質問では、select2を使用していますが、通常のselect要素であると私が想定しているものに対してsetを呼び出しています。JS ウィジェットを使用している場合、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 要素をクリックして選択します。

于 2015-12-29T18:01:34.557 に答える