rspe c sign_in работает в запросах, но не в контроллере - PullRequest
0 голосов
/ 31 января 2020

У меня есть эта спецификация \ запросы \ session_spe c .rb

require 'rails_helper'

RSpec.describe "Sessions" do
 it "signs user in and out" do
    u = sign_in mockuser
    p u.inspect 
 end

end

приведенный выше код работает хорошо,

, но когда я вызываю тот же sign_in из контроллера, он не Я борюсь с этим уже 10 часов.

spec \ controllers \ properties_controller_spe c .rb

require 'rails_helper'

describe PropertiesController do

    context 'when searching after  login' do 
        it 'should success and render to index page' do
           u = sign_in mockuser
           p u.inspect // returns nil
        end
    end
end

моя спецификация \ support \ devise_request_spec_helper.rb

module DeviseRequestSpecHelpers

   include Warden::Test::Helpers

   def sign_in(resource_or_scope, resource = nil)
     resource ||= resource_or_scope
     scope = Devise::Mapping.find_scope!(resource_or_scope)
     login_as(resource, scope: scope)
   end
end

1 Ответ

2 голосов
/ 31 января 2020

Помощники по тестированию Warden не работают для спецификаций контроллера, поскольку спецификации контроллера имитируют всю фазу запроса и, таким образом, обходят промежуточное ПО.

Либо используйте Devise::Test::ControllerHelpers, который заглушает надзиратель, либо получите спецификации программы и контроллера траншей и просто напишите спецификации запроса .

Запросите спецификации, предоставьте высокоуровневая альтернатива спецификациям контроллера. Фактически, начиная с RSpe c 3.5, команды Rails и RSpe c не рекомендуют напрямую тестировать контроллеры в пользу функциональных тестов, таких как спецификации запросов.
- rspe c -rails readme

...