Test SessionsConstroller Devise + RSpec

时间:2016-09-19 15:01:43

标签: ruby-on-rails rspec devise

我在SessionsController上有这个自定义创建方法:

def create
    puts "!!!!!!!!!!!!!!!"
    if view_only?
        login_visualizacao
        return
    end
    puts "1111111111111111"

   super
    puts "2222222222222222"
    set_token current_usuario, nil unless !current_usuario
end

尝试使用RSpec进行测试,如下所示:

require 'spec_helper'

describe Usuarios::SessionsController do# do, :type => :controller do
    describe 'Realizar login' do
        let(:codigo) { '1020' }
        let(:senha) { '12345' }

        context 'quando o login via API é feito corretamente' do
            # let(:user) { Usuario.new(codigo: codigo, password: senha) }
            let(:user) { mock_model(Usuario, codigo: codigo, password: senha) }

            before do
                setup_controller_for_warden
                @request.env["devise.mapping"] = Devise.mappings[:usuario]
                allow(user).to receive(:authenticatable_salt)
                allow(subject).to receive(:super)
                sign_in(user)
                # allow(subject).to receive(:current_usuario).and_return(user)
                allow(subject).to receive(:set_token)                   
            end
        end
    end
end

我将这些代码放在spec_helper中:

  config.include Devise::TestHelpers, type: :controller
  config.include Devise::TestHelpers, type: :request

问题是我的RSpec测试没有打印“2222222222”,我认为超级代码没有成功执行,用户没有被记录,因此current_usuario是零。我不知道whatelse失踪了,有人可以帮帮我吗?如何模拟对super方法的调用?

0 个答案:

没有答案