RSpec/Capybara请求规范 - 无法让Devise发布新的用户会话

Vie*_*iet 5 rspec capybara

我正在尝试通过创建一个POST用于新用户会话的帮助程序来启动新的用户会话.这就是我所拥有的

def login(user)
  post user_session_path, :login => user.username, :password => user.password
end
Run Code Online (Sandbox Code Playgroud)

并为用户

user = Factory.create(:user)
Run Code Online (Sandbox Code Playgroud)

我在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)
Run Code Online (Sandbox Code Playgroud)

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

pag*_*ibe 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
  ...
Run Code Online (Sandbox Code Playgroud)

从这里找到了解决方案:http://blog.joshmcarthur.com/2011/06/11/integration-tests-with-devise-and-rspec/