2012-02-04 62 views
5

我试图通过创建一个新的用户会话POST帮助器来开始一个新的用户会话。以下是我有RSpec /水豚请求规格 - 无法得到Devise 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) 

我尝试通过浏览器手动使用登录页面,并能够创建会话就好了。我还写了一个测试与水豚,访问登录页面,填写用户凭据,并提交。这创建了一个没有问题的新用户会话。

+0

我遇到了这个简单地说,当我试图错误地将这两个声明合并为1。他们应该分开。 'config.before(:每个)做 DatabaseCleaner.strategy =:交易 端 config.before(:每个)做 DatabaseCleaner.start 端 ' 成 ' config.before(:每个)do DatabaseCleaner.strategy =:事务 DatabaseCleaner.start 结束 ' – Ryan 2015-07-04 16:49:58

回答

27

我得到这个由包括监狱长::测试::助手(其设计用途在幕后)工作

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/

+0

工作很好。谢谢! – PetrolMan 2012-04-18 20:30:06

+0

也与'minitest'一起工作。谢谢! – 2013-01-17 00:28:46

+0

但这并不测试实际的表单提交方案吗? – emaillenin 2014-08-17 13:18:19