現在、Railsチュートリアルを進めています。
5章の「5.3.1 Contactページ」からエラーが発生するようになってしましました。
その時に行った対処法を記録しておきます。
ただし本記事に行った事をやっても結果的に解決しませんでした。
というわけで参考程度に。
ローカル環境を構築してRailsチュートリアルを進めたらエラーが発生
おそらく環境的なことが理由だと思います。
本エラーが発生した時、私はローカル環境を構築してチュートリアルを進めてました。
自分で、Windows10パソコンにRubyインストールして、Ruby on Rails インストールして、という感じ。
Railsチュートリアルでも環境面の複雑さを避けるために、AWS Cloud9の使用を推奨しています。
それに背いて頑張ってローカル環境を構築した結果です…
ちなみに、本エラーが発生し結局原因がわからず。
その後、改めて「AWS Cloud9 クラウドIDEサービス」を使用した環境を構築してみたらエラーは発生しませんでした。
なので色々やってダメなら、AWS Cloud9を使用した環境を作りなおすことを推奨します。
※環境面で前に進めなくなるのはストレスでしかないですからね!
Railsチュートリアル5.3.1で発生したエラー
エラーは以下のコマンドで発生しました。
rails test
エラー内容は以下
StaticPagesControllerTest#test_should_get_contact:
ActionView::Template::Error: undefined local variable or method help_path' for #<#<Class:0x000000000a302848>:0x000000000b24ce48>
_app_views_layouts_application_html_erb__629600530_85761180'
app/views/layouts/application.html.erb:17:in
test/controllers/static_pages_controller_test.rb:24:in block in <class:StaticPagesControllerTest>'
「help_path」が定義されてないよ、というようなエラーです。
Railsチュートリアル5.3.1で発生したエラーの原因
- rspec2系
- rspec3系
の違いによるもののようです。
rspec2系とrspec3系では記述方法が異なる箇所があります。
チュートリアルでは、rspec2系で記述されているが、自分の環境がrspec3系のため、エラーとなっていた模様。
という訳で、チュートリアルで進めているサンプルをrspec3系の記述に修正してあげます。
rspec3系に変換してみる
transpecをインストール
コマンドラインで以下を入力し、transpecをインストールします。
gem install transpec
transpecを実行
コマンドラインで以下を実行
transpec
これでrspec2系の記述をrspec3系の記述に変換してくれるようです。
ここで以下のエラーが表示されました。
「undefined method version' for nil:NilClass」が表示される場合の対処
この時、私の環境では以下のエラーが発生しました。
undefined method `version' for nil:NilClass
私が実施した対処法は以下。
Gemfileに以下を追加します。
1 2 3 4 | group :test, :development do gem 'rspec-rails', '~> 3.0.1' # ... end |
コマンドラインで以下を実行
bundle update
これで、「transpec」を実行するとエラー無く通るようになりました。
rails g rspec:install
試したのはここまで…
その後、transpecを実行し
「rails test」を実行してみたがダメ。
結局解決策は見つからず。
というわけで、冒頭で記述したように、Rilsチュートリアルでも推奨のAWS Cloud9を使用した環境構築をオススメします。
て戻ってしまいますが、環境作り直して再トライしてみてください。