LoginSignup
1
0

More than 1 year has passed since last update.

RSpecでCapybaraを導入する

Last updated at Posted at 2022-05-08

概要

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つ目のエラー

スクリーンショット 2022-05-08 16.27.25.png

考察

文法的には間違えてない為デバックをしたところ、visitがそもそも定義されてないことを発見した。
調べてみるとvisitはCapybaraに定義されてる為うまく読み込まれてないのではないかと考察した。

解決方法

Capybaraは既にデフォルトで入っていたためRSpecで利用するために追加

spec/spec_helper.rb
+ require 'capybara/rspec'

2つ目のエラー

今度はvisitは使えるようになったが、root_pathが未定義とのエラー
スクリーンショット 2022-05-08 16.37.24.png

考察

ここでvisit "/"としたらテストが通ることを確認した。
しかしvisit root_pathだと通らない何故だろう🤔
調べてみると名前付きルートを使えるように記述する必要があるとのこと

解決方法

spec/spec_helper.rb
+  RSpec.configure do |config|
+   config.include Rails.application.routes.url_helpers
+  end

これで名前付きルートを使えるようにした。

3つ目のエラー

よし今度こそと思ったがさらにエラー
スクリーンショット 2022-05-08 16.46.43.png

考察

調べてみるとこちらの記事の通りに書いたらできた
コードの意味はいまいち分からないのでまた調べ次第追記していこうと思う。
コードの意味を少し理解できたので忘れないうちに書いていこうと思う

参照:https://qiita.com/tak-msk/items/c21a2c4ccae7942625be

解決方法

spec/spec_helper.rb
+ 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'

やっとこれでテストがパスするようになった🥺
スクリーンショット 2022-05-08 16.54.11.png

最後に

もっと早くエラーが解決できるようになりたいな😭

1
0
2

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
1
0