LoginSignup
2
1

More than 5 years have passed since last update.

CapyabraでJSが関連するテストがundefined methodエラーになる

Posted at

RSpec x Capybara で JS が絡んだテストする際に,バージョンやドライバによって使える使えないメソッドがある.

https://github.com/thoughtbot/capybara-webkit/issues/84#issuecomment-111632554
https://stackoverflow.com/a/44401757/4535592

やりたいこと

あるモデルの削除ボタンをクリックすると,confirmダイアログが表示され,それを accept すると削除が完了するケースをテストしたい.
Viewの記述はざっくり下記の通り.

views/hoges/edit.html.slim
= link_to @hoge, data: {confirm: 'Are you sure you want to delete?'}, method: :delete, id: 'delete-hoge' do
    | 削除

記述方法

やはりバージョンによって記述がまちまちのようだが,2017.08 にリリースされた現時点での最新版 2.15.1 だと,下記で問題なく動作した.

  • capybara 2.15.1
  • capybabra-webbkit 1.1.0
Gemfile
group :test do
  gem 'rspec-rails'
  gem 'capybara', '~>2.15.1'
  gem 'capybara-webkit',  '~>1.1.0'
end
Gemfile.lock
    capybara (2.15.1)
      addressable
      mini_mime (>= 0.1.3)
      nokogiri (>= 1.3.3)
      rack (>= 1.0.0)
      rack-test (>= 0.5.4)
      xpath (~> 2.0)
    capybara-webkit (1.1.0)
      capybara (~> 2.0, >= 2.0.2)
      json
spec_helper.rb
require 'capybara/rspec'
Capybara.javascript_driver = :webkit

accept は page.driver.browser.accept_js_confirms を使う.
page.driver.browser.switch_to.alert.acceptpage.accept_confirm { click_link "XXX" } は, undefined method エラーになり動作しなかった.

hoge_spec.rb
feature 'hoge', js: true do # ← js:true は必須
  scenario 'hogehoge' do
    hoge = FactoryGirl.create(:hoge)
    visit edit_hoge_path(hoge)

    expect(page).to have_content 'edit hoge'

    click_link 'delete-hoge'
    page.driver.browser.accept_js_confirms

    expect(page).to have_content 'Completed'
  end
end
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1