10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails + Devise のテストを、Cucumber + Poltergeist で行っていたらハマった(解決済み)

Last updated at Posted at 2015-11-26

2015年11月現在、Rails のプロダクトでユーザ認証機能(いわゆるログイン、ログアウト)を作るとしたらデファクトスタンダードとなっている Devise という Gem ですが、

歴史の長いフレームワークなだけあって、ちょっと記述が古い点があります。例えば
rails g devise:controller hoge
で追加される controller が before_action ではなく before_filter を使っていたり。

まぁそこらへんは適時 Rubocop あたりに修正してもらうとして、とはいえデフォルトの設定のまま使うこともないので、記述の古さや遷移先等を修正したり、Userモデルにカラムを追加したりしたら、テストを書きたくなるわけです。

というわけでとりあえず、
rails3-devise-rspec-cucumber
の記述を参考にしつつ、可能な限りモダンな RSpec, Cucumber を書いていったわけなのですが、問題が。

実際に手で動かしたら再現しない、テストの失敗がでました。

構成

  • Ruby : 2.2.3(rbenv でインストールされる最新)
  • Rails : 4.2.4
  • devise : 3.5.2
  • cucumber : 1.3.20
  • poltergeist : 1.8.0

Rails.root/support/env.rb に Capybara.default_driver = :poltergeist と記入し、全ての Cucumber の受け入れテストに poltergeist の driver を使う設定としました。

また、 Devise ではメール認証を行うため、「confirmable」のコメントアウトを外し、有効にする設定にしました。

エラーの箇所

sign_in.feature の最初のテスト、9行目「Then I see an invalid login message」が失敗しました。本来なら user_steps.rb の 109行目に記述のある「Email is invalid」に類する、カラムの値がおかしい旨のメッセージが表示されたいのですが、実際には、

You have to confirm your email address before continuing.

という、「ユーザ登録は行っているが、メール認証は行っていない」ときのエラーがでました。
ちなみに、 rack_test だと、このエラーは出ませんし、もちろん、手動で動かした場合は、「Email is invalid」が表示されます。

試行錯誤

user_steps では「一度ユーザを作って削除している」という動作を行っているため、その前後でsession, cookie を削除する処理を入れましたが、それでもどうしようもなく。

解決策

devise の github の wiki に、解決策が載っていました。

How To: Test with Capybara#Capybara and Poltergeist

Cucumber の問題だと思って見逃してしまっていました。

指定されたファイルを Rails.root/features/support/ 下に置けば、とりあえず動きました。
とりあえず、動いたのでOK。

オチ

ちなみにこのファイルが入った状態で Rubocop で構文チェックを行ったところ、怒られました。クラス変数をインスタンス変数に変更しても動いたので、よし。
そして動いたのはいいけれど、JavaScript を使っていないテストは、時間短縮のため rack_test で行うことに。

ちなみに(これは未解決)

capybara-webkit でも出たので、phantomJS との相性なのかなぁ、と思っています。

10
9
1

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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?