お知らせ
僕が翻訳者の1人として参加している電子書籍「Everyday Rails - RSpecによるRailsテスト入門」の小規模なアップデートを実施しました。
購入者の方にはおそらく通知メールが飛んでいるはずです。
アップデート版をダウンロードする場合はLeanpubにログインして、Libraryページにアクセスしてください。
(または通知メールに記載されたリンクからもダウンロードできます)
アップデート版のダウンロードはもちろん無料です。
具体的なアップデート内容
今回のアップデートでは原著の2018年6月4日版に追従しました。
とはいえ、2018年6月4日版のアップデート内容はそれほど大規模なものではなく、いくつかの小粒なアップデートをまとめてリリースしたような内容になっています。
興味深い変更点をあえて挙げるなら、以下の2点でしょうか。
- ChromeDriverのインストールにchromedriver-helper gemを使うようになったところ
- Factory GirlがFactory Botに変わったところ
chromedriver-helperは便利なので僕もよく使っています。
また、Rails開発者であればFactoryGirlの名前がFactoryBotに変わったというニュースもすでにご存じなのではないでしょうか。
今回のアップデートにより、Everyday Railsを読む際にgemの名前を毎回頭の中で読み替えずに済みますね。
その他、環境やバージョンによる違いなど
Rails 5.2でも基本的な考え方は同じです
本書はRails 5.1を対象にしていますが、現時点(2018年7月)の最新版であるRails 5.2を使う場合でも基本的な考え方は同じなので、本書の内容はほぼそのまま適用可能です。
ただし、Rails 5.2とrspec-rails 3.7で動かす場合は、サンプルアプリケーションのテストコードで以下の変更が必要になります。
- コントローラスペックとリクエストスペック
expect(response).to be_success
をexpect(response).to be_successful
に変更する- リクエストスペック
expect(response).to have_http_status(:success)
をexpect(response).to be_successful
に変更する
具体的な変更点については、こちらのdiff(差分)も参考にしてください。
https://github.com/everydayrails/everydayrails-rspec-2017/compare/master...JunichiIto:rails-5-2
システムスペックについて
rspec-rails 3.7ではフィーチャスペックの代わりにシステムスペックというタイプのテストを書くことができます(ただし、システムスペックを使う場合はRails 5.1以上が必要)。
システムスペックの説明やフィーチャスペックからシステムスペックに移行する方法を知りたい場合は、以下のブログ記事を参照してください。
サンプルアプリケーションはRuby 2.4、またはDevise 4.4以上で動かしてください
本書のサンプルアプリケーションは以下のリポジトリで公開されています。
ただし、2018年7月時点のmasterブランチのテストコードをRuby 2.5で動かそうとすると、以下のようなエラーが発生します。
Failures: 1) Sign in user signs in Failure/Error: click_link "Sign In" SyntaxError: /Users/jnito/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '{', expecting keyword_end ...ion only: [:create, :destroy] { request.env["devise.skip_tim... ... ^ /Users/jnito/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '}', expecting keyword_end ..."devise.skip_timeout"] = true } ... ^ # ./spec/features/sign_ins_spec.rb:12:in `block (2 levels) in <top (required)>' # -e:1:in `<main>' Finished in 9.24 seconds (files took 3.78 seconds to load) 70 examples, 1 failure Failed examples: rspec ./spec/features/sign_ins_spec.rb:10 # Sign in user signs in
これはサンプルアプリケーションのDeviseのバージョンが古いのが原因です(参考)。
Ruby 2.5ではなく、2.4に落として実行すると、正常に動作します。
rbenvを使っている場合は以下のコマンドでRubyのバージョンを指定してください(以下の例ではRuby 2.4.4を指定していますが、2.4系であれば他のバージョンでも構いません)。
rbenv local 2.4.4
もしくは以下のコマンドでDeviseをアップデートすれば、Ruby 2.5でも動作します(Devise 4.4以上であればOKです)。
bundle update devise
まとめ
というわけで、このエントリでは2018年7月10日に実施した「Everyday Rails - RSpecによるRailsテスト入門」のアップデート内容について紹介しました。
すでに本書を持っている方はぜひ最新版をダウンロードしてください。
Everyday Rails - RSpecによるRailsテスト入門 | Leanpub
「Everyday Railsって何?」「いったいどんな本?」と思われている方は以下のブログ記事をご覧ください😉