2016-09-04 2 views
0

У меня есть действие контроллера, которое использует «user_signed_in?» как условие. Действие выглядит следующим образом:devise "user_signed_in?" метод в rspec

def show   
    if user_signed_in? 
    #do stuff 
    end 
end 

Но когда я тестирую это действие в RSpec, тесты терпят неудачу, потому что код внутри блока, если никогда не запускается на выполнение. Есть ли способ заглушить метод «user_signed_in?»?

ответ

0

Код не выполнен, так как пользователь, возможно, не выполнил вход. Чтобы выполнить вход в программу разработки rspec, используйте это в spec/support/controller_macros.rb.

module ControllerMacros 
    def login_user 
     before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     user = FactoryGirl.create(:user) 
     user.confirm! #if you are using the "confirmable" module 
     sign_in user 
     end 
    end 
end 

В spec/rails_helper.rb есть это:

RSpec.configure do |config| 
    config.include Devise::Test::ControllerHelpers, :type => :controller 
    config.extend ControllerMacros, :type => :controller 
end 

Затем в контроллер спецификации:.

describe MyController do 
    login_user 
    .... 
end 
+0

Нет, я пользователь вошел в код, который вы показали, что уже есть в моем приложении. –

+0

Какая ошибка в ваших технических характеристиках? –

+0

К сожалению. Похоже, я забыл пропустить фильтры перед фильтрами. Это были проблемы. Извините, я новичок в этом. Спасибо, в любом случае. –

Смежные вопросы