すみません、すごく初歩的な質問になってしまうのですが、specのヘルパーメソッドを共通化したいのですがそのやり方がわかりません。
エラーメッセージ
ruby
An error occurred while loading ./spec/system/sessions_spec.rb. Failure/Error: RSpec.describe SessionsHelper, type: :helper do def is_logged_in? !session[:user_id].nil? end end NameError: uninitialized constant SessionsHelper # ./spec/helpers/sessions_helper_spec.rb:13:in `<top (required)>' # ./spec/rails_helper.rb:3:in `require' # ./spec/rails_helper.rb:3:in `<top (required)>' # ./spec/system/sessions_spec.rb:1:in `require' # ./spec/system/sessions_spec.rb:1:in `<top (required)>' Run options: include {:locations=>{"./spec/system/sessions_spec.rb"=>[4]}} All examples were filtered out Finished in 0.00003 seconds (files took 0.87982 seconds to load) 0 examples, 0 failures, 1 error occurred outside of examples
該当ファイル
spec/helpers/sessions_helper_spec.rb
このメソッドを共通化したいです。
ruby
require 'rails_helper' # Specs in this file have access to a helper object that includes # the SessionsHelper. For example: # # describe SessionsHelper do # describe "string concat" do # it "concats two strings with spaces" do # expect(helper.concat_strings("this","that")).to eq("this that") # end # end # end RSpec.describe SessionsHelper, type: :helper do def is_logged_in? !session[:user_id].nil? end end
spec/rails_helper.rb
ヘルパーメソッドを定義したファイルをrequireすればいいのではと思いました。
ruby
# This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' require './spec/helpers/sessions_helper_spec' # ↑これで共通化できると思いました。
spec/system/sessions_spec.rb
ruby
require 'rails_helper' RSpec.describe "Sessions", type: :system do context "ユーザー登録した場合" do let!(:user) { create(:user) } it "ログインできる" do visit login_path fill_in 'session[email]', with: user.email fill_in 'session[password]', with: user.password click_on 'ログイン' expect(page).to have_current_path("/users/#{user.id}") expect(page).to have_content(user.name) expect(page).to have_link "ログアウト", href: "/logout" expect(is_logged_in?).eq true #<= ここでエラーが起こりました。 end end
自分の考え
ためしに
require './spec/helpers/sessions_helper_spec'
をコメントアウトすると
ruby
# This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' # require './spec/helpers/sessions_helper_spec'
undifined method 'is_logged_in?'
となりました。
なので、コメントアウトせずに
ruby
# This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' require './spec/helpers/sessions_helper_spec'
と記述することで'./spec/helpers/sessions_helper_spec'の読み込み自体は成功してる気がします。
言い換えるとパスはあってる気がします。
sessionモデルは作成してないのでそれが原因でエラーが起きてるかもしれないですが、
モデルを作成せずヘルパーメソッドを共通化したい場合どうすればいいのか分かりませんでした。
ご回答いただければ幸いです。
まだ回答がついていません
会員登録して回答してみよう