前提・実現したいこと
バックエンドにrails-apiモード、フロントにreactを使用しています。
rspecでsession[:user_id] = user.idによりログイン状態を作りたいのですが、sessionがundefined methodということで使用することができません。
users_controller内では使用できるのですが、なぜrspecでは使用できないのか分からずにおります。
※↓のソースコードの最後のテストでsessionを使用しています。
ご知見ございます方いらっしゃいましたらアドバイスいただけると幸いです。
発生している問題・エラーメッセージ
NameError: undefined local variable or method `session' for #<RSpec::ExampleGroups::User:0x00005558cc6b4930>
該当のソースコード
require 'rails_helper' RSpec.describe User, type: :model do user = FactoryBot.build(:user) it 'should be vaild' do expect(user).to be_valid end it 'name should be present' do user = FactoryBot.build(:user, name: '') expect(user).not_to be_valid end it 'name should be not be too long' do user = FactoryBot.build(:user, name: 'a' * 51) expect(user).not_to be_valid end it 'email should be present' do user = FactoryBot.build(:user, email: '') expect(user).not_to be_valid end it 'email should be not be too long' do user = FactoryBot.build(:user, email: "#{'a' * 244}@example.com") expect(user).not_to be_valid end it 'email validation should accept valid addresses' do valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn] valid_addresses.each do |valid_address| user = FactoryBot.build(:user, email: valid_address) expect(user).to be_valid end end it 'email validation should reject invalid addresses' do invalid_addresses = %w[user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com foo@bar..com] invalid_addresses.each do |invalid_address| user = FactoryBot.build(:user, email: invalid_address) expect(user).not_to be_valid end end it 'email addresses should be unique' do duplicate_user = user.dup user.save expect(duplicate_user).not_to be_valid end it 'email addresses should be saved as lower-case' do mixed_case_email = 'HogE@GmaiL.coM' user = FactoryBot.build(:user, email: mixed_case_email) user.save expect(user.reload.email).to eq mixed_case_email.downcase end ******//こちらでsessionを使用しています。****** it 'should be rejected when edit as wrong user' do user=FactoryBot.create(:user) Another=FactoryBot.create(:Another) session[:user_id] = user.id expect(patch user_path(Another), params:{user: {name:'update'}}).to have_http_status(404) end end
試したこと
spec内にapi/spec/support/rspec_helper.rbを作成し、以下のようなヘルパーを作成しましが、同様のエラーがでてしまいました。
def log_in_as(user) session[:user_id] = user.id end
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/25 10:56
2021/01/25 13:25
2021/01/26 11:38