Ruby on Railsチュートリアルのサンプルアプリ sample_appのRails 4対応作業。
$ bundle exec rspec spec/models/user_spec.rb
で、エラー、
/usr/local/rvm/gems/ruby-2.0.0-p353@global/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common/zipper.rb:1:in `require’: cannot load such file — zip/zip (LoadError)
が出る。ググると、http://www.workabroad.jp/posts/1095 が引っかかる。selenium-webdriver gemのバージョンを新しいのに上げるといいらしい。ところで、Everyday Rails RSpecによるテスト入門では、JavaScriptを含む複雑なwebアプリ上の操作をFirefox経由で行うときに、Seleniumを使うが、Firefoxが頻繁にアップデートするため、Seleniumを使ったテストが動かなくなることが多く、selenium-webdriver gemは最新版にアップデートした方がいいとのこと。そこで、それを、2.40.0にあげたら、エラーはなくなった。テストは失敗するが。
$ bundle exec rspec spec/models/user_spec.rb
テストが失敗するが、Factoryが登録されていないと言われるので、factories.rbを規定の場所にコピー。
再度、
$ bundle exec rspec spec/models/user_spec.rb
チュートリアルによると、”protected_attributes gem (リスト12.1) の動作がRails 3.2の「アクセス可能な属性」と異なっているため、マスアサインメントのセキュリティエラーをテストするコードは4.0では動作しなくなりました。”ということなので、失敗しているテストを削除。再度、テスト。OK。
同様に、micropost、relationshipモデルのテストの失敗する部分も、削除する。
user_pages_spec.rb の修正では、
it { should have_selector(‘title’, text: ‘All users’) }
を
it { should have_title(‘All users’) }
などと置き換えないといけない。hav_titleメソッドで、text: を書くとダメ。
チュートリアルの、Rails 4対応の説明の通りにやると、これで全テストが通るのだけど、app/asssetsの内容をコピーすると、
undefined method `environment’ for nil:NilClass when importing Bootstrap
と言われる。ググると、http://stackoverflow.com/questions/22392862/undefined-method-environment-for-nilnilclass-when-importing-bootstrap が引っかかり、sass-railsが4.0.0だとダメということで、4.0.2に変更したら、テストが通るようになった。