LoginSignup
2
1

More than 3 years have passed since last update.

RSpecのCapybaraを使ったシステムスペックで`NotImplementedError`が出たときの対処法

Posted at

システムスペックを書いている際にCapybaraのsend_keysメソッドを使おうとしたら、
NotImplementedErrorが発生し、解決に時間がかかってしまったので、対処法を備忘録として記載します。

結論から言うと、RSpecでJavaScriptを使う設定をし忘れていたことが原因でした。

エラーの発生

下記のテスト実行時に、NotImplementedErrorが発生しました。

Failures:

  1) Messages can display messages in real time
     Failure/Error: find('#message').send_keys(:enter)

     NotImplementedError:
       NotImplementedError

発生箇所はsend_keysメソッドのようです。

spec/systems/messages_spec.rb
require 'rails_helper'

RSpec.describe 'Messages', type: :system do
  # 略
  it 'can display messages in real time', js: true do
    log_in(user)
    visit room_path(room)
    message = 'Hello'
    expect{
      fill_in 'Write a message', with: message
      # send_keysメソッドでエラー発生
      find('#message').send_keys(:enter)
    }.to change(Message, :count).by(1)
    expect(page).to have_content message
  end

対処法

1 JSのドライバの設定を追加する

spec/support/capybara.rb
RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end
  # 追記
  config.before(:each, type: :system, js: true) do
    driven_by :selenium_chrome_headless
  end
end

2 スペックでJSを有効にする

spec/support/capybara.rb
require 'rails_helper'

RSpec.describe 'Messages', type: :system do
  # 略
  # js: true を追記
  it 'can display messages in real time', js: true do
    log_in(user)
    visit room_path(room)
    message = 'Hello'
    expect{
      fill_in 'Write a message', with: message
      find('#message').send_keys(:enter)
    }.to change(Message, :count).by(1)
    expect(page).to have_content message
  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