概要
RSpecにCapybaraを導入したらつまづいたので解決方法を共有します
1人でも多くの人の役にたてればと思います。
はじめに
使用する環境
- MacOS(M1)
- Rails 6.1.5
- Ruby 3.1.0
- yarn 1.22.17
- Homebrew 3.4.8
状況
ログインのテストを作成しようとしたときに、 visit root_pathを記述してページ移動をしようとした時に、テストを実行しようとしたらエラーが出てしまって詰まった
1つ目のエラー
考察
文法的には間違えてない為デバックをしたところ、visitがそもそも定義されてないことを発見した。
調べてみるとvisitはCapybaraに定義されてる為うまく読み込まれてないのではないかと考察した。
解決方法
Capybaraは既にデフォルトで入っていたためRSpecで利用するために追加
+ require 'capybara/rspec'
2つ目のエラー
今度はvisitは使えるようになったが、root_pathが未定義とのエラー
考察
ここでvisit "/"としたらテストが通ることを確認した。
しかしvisit root_pathだと通らない何故だろう🤔
調べてみると名前付きルートを使えるように記述する必要があるとのこと
解決方法
+ RSpec.configure do |config|
+ config.include Rails.application.routes.url_helpers
+ end
これで名前付きルートを使えるようにした。
3つ目のエラー
考察
調べてみるとこちらの記事の通りに書いたらできた
コードの意味はいまいち分からないのでまた調べ次第追記していこうと思う。
コードの意味を少し理解できたので忘れないうちに書いていこうと思う
参照:https://qiita.com/tak-msk/items/c21a2c4ccae7942625be
解決方法
+ ENV["RAILS_ENV"] ||= 'test'
+ require File.expand_path("../../config/environment", __FILE__)
+ require 'rspec/rails'
まずこちらのコードではrailsの環境が擬かnilならtestを代入するとのコードになっている
ENV["RAILS_ENV"] ||= 'test'
次にこちらなんですけど、2つ上の階層からconfig/environmentのファイルを読み込んでいる
require File.expand_path("../../config/environment", FILE)
ターミナルで確認しようと思う。
cd spec
pry
File.expand_path("../../config/environment", __FILE__)
Users/Username/Rails_product/Training_App/config/environment"
こちらを読み込んでいるのが確認できる
こちらは外部ファイルかな多分を読み込んでいる
require 'rspec/rails'
最後に
もっと早くエラーが解決できるようになりたいな😭