控制器上的 Rspec 和设备。 “您正在被重定向”

问题描述 投票:0回答:3

我发现关于这个主题的帖子不够,所以我决定再次发布问题。

我只是想测试使用带有 rspec 的 devise 的控制器。

我确实添加了rails_helper.rb

config.include Devise::TestHelpers, :type => :controller

我写了这个测试:

describe AlbumsController do
    render_views
    let(:user) { User.create!(email: "[email protected]", password: "password") }
    before(:each) do
        sign_in(user)
    end
    it "should have a current_user" do
        subject.current_user.should_not be_nil
    end
    describe "get ALBUM index" do
        describe "for a registred user" do
            it "should => index page" do
                get :index
                response.should have_selector('div#photos')
            end
        end
    end
end

我的索引方法真的被执行了!我添加了一些 put 来跟踪执行。 subject.current_user 不为空。一切都应该很好。

但我收到一条消息:

<html><body>You are being <a href=\"http://test.host/main\">redirected</a>.</body></html>

我的索引操作中没有特定的redirect_to或render方法。它只是渲染默认值。

这里有什么问题?

我正在使用 gem 'devise',“2.2.8”和 gem 'rails',“3.2.1”。我知道它很老了。我尝试在迁移到 Rails 4 之前添加测试:-/

编辑1:

current_user 在我的索引方法中有效。 这意味着这不是设计问题。但渲染的视图

ruby-on-rails rspec devise
3个回答
1
投票

尝试使用这样的结构

  before(:each) do
    @request.env["devise.mapping"] = Devise.mappings[:user]
    sign_in user
  end

来源:https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29


0
投票

尝试添加: 在 { request.env['HTTPS'] = 'on' }

之前

0
投票

如果您打开了设备可确认功能,您可能需要在登录之前确认您的用户。

...
before do
  user = create(:user)
  user.confirm
  sign_in(user)
end
...
© www.soinside.com 2019 - 2024. All rights reserved.