我发现关于这个主题的帖子不够,所以我决定再次发布问题。
我只是想测试使用带有 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 在我的索引方法中有效。 这意味着这不是设计问题。但渲染的视图
尝试使用这样的结构
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in user
end
尝试添加: 在 { request.env['HTTPS'] = 'on' }
之前如果您打开了设备可确认功能,您可能需要在登录之前确认您的用户。
...
before do
user = create(:user)
user.confirm
sign_in(user)
end
...