お世話になります。
rspecを用いてcontrollerのテストをしています。
テストでcurrent_userを使用したくて、deviseのWikiで紹介されていた方法(下記参照)で定義し、テストを実行しましたが、undefined method confirm for #<User:XXXXXX>
となり、テストが失敗します。
この解決法が知りたいです。ご教授いただけると幸いです。
※user.confirm
の部分をコメントアウトすると、テストは通ります。
※Wikiではconfirm!ですが、既に削除されているメソッドとのことで、confirmを使用しています。
- 参照元
https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-(and-RSpec)
ソース
- spec/rails_helper.rb
require 'spec_helper' require 'rspec/rails' require 'devise' RSpec.configure do |config| config.include Devise::Test::ControllerHelpers, :type => :controller end
- spec/support/controller_macros.rb
module ControllerMacros def login_admin before(:each) do @request.env["devise.mapping"] = Devise.mappings[:admin] sign_in FactoryBot.create(:admin) # Using factory bot as an example end end def login_user before(:each) do @request.env["devise.mapping"] = Devise.mappings[:user] user = FactoryBot.create(:user) user.confirm # or set a confirmed_at inside the factory. Only necessary if you are using the "confirmable" module sign_in user end end end
- /spec/factories/users.rb
FactoryBot.define do factory :user, class: User do name "Test_name" email Faker::Internet.email rank 40 password "test1234" password_confirmation "test1234" end end
- /spec/rails_helper.rb
require_relative 'support/controller_macros' RSpec.configure do |config| config.include Devise::Test::ControllerHelpers, :type => :controller config.extend ControllerMacros, :type => :controller end
- /spec/models/user_spec.rb
describe Admin::UsersController, type: :controller do context "login_as_general_user" do login_user it "should have a user for check" do expect(subject.current_user.rank).to_not eq(100) end end end
エラー
NoMethodError: undefined method `confirm' for #<User:XXXXXXXX> 0) User Admin::UsersController login_as_general_user should have a user for check Failure/Error: user.confirm NoMethodError: undefined method `confirm' for #<User:XXXXXXXXXXX> # ./spec/support/controller_macros.rb:13:in `block in login_user'
バージョン
ruby 2.5
Ruby on Rails 5.2
devise 4.4.3
あなたの回答
tips
プレビュー