我尝试通过创建POST新用户会话的帮助程序来启动新用户会话。这就是我所拥有的
def login(user)
post user_session_path, :login => user.username, :password => user.password
end
对于用户
user = Factory.create(:user)
我在RSpec中进行了测试,将用户定向到需要身份验证的页面。使用帮助程序,我希望创建一个新的用户会话。但是,运行规范时,它告诉我当前页面是登录屏幕。这表示在没有用户会话的情况下访问受限资源时,未创建新用户会话并且用户被重定向到登录屏幕。查看测试日志,就是这种情况。
同时查看日志,它表示POST操作未经授权。
Started POST "/login" for 127.0.0.1 at 2012-02-04 13:34:59 -0800
Processing by SessionsController#create as HTML
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"}
Completed 401 Unauthorized in 1ms
Processing by SessionsController#new as HTML
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"}
Rendered devise/shared/_links.erb (1.4ms)
Completed 200 OK in 15ms (Views: 12.7ms | ActiveRecord: 0.0ms)
我尝试通过浏览器手动使用登录页面,并且能够创建会话就好了。我还与Capybara一起编写了一个测试,访问登录页面,填写用户凭据并提交。这会创建一个没有问题的新用户会话。
答案 0 :(得分:27)
我通过包括Warden :: Test :: Helpers(设计幕后使用)来实现这一目标
require 'spec_helper'
include Warden::Test::Helpers
describe "...Whatever..." do
before(:each) do
@user = Factory.create(:user)
login_as @user, :scope => :user
end
...
从这里找到解决方案:http://blog.joshmcarthur.com/2011/06/11/integration-tests-with-devise-and-rspec/