RSpec/Capybara请求规范——Can';无法让Desive发布新用户会话

RSpec/Capybara请求规范——Can';无法让Desive发布新用户会话,rspec,capybara,Rspec,Capybara,我试图通过创建一个发布新用户会话的助手来启动一个新用户会话。这是我的 def login(user) post user_session_path, :login => user.username, :password => user.password end 和用户 user = Factory.create(:user) 我在RSpec中有一个测试,它将用户引导到需要身份验证的页面。使用助手,我希望创建一个新的用户会话。然而,运行规范时,它告诉我当前页面是登录屏幕。这表明

我试图通过创建一个发布新用户会话的助手来启动一个新用户会话。这是我的

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编写了一个测试,它访问登录页面,填写用户凭据,然后提交。这将创建一个没有问题的新用户会话。

我通过包括Warden::Test::Helpers(在幕后设计用途)来实现这一点


从这里找到了解决方案:

但这并没有测试实际的表单提交场景,对吗?@emaillenin:没错。这使得用户在没有通过网站登录的情况下登录。当我试图将这2个声明合并为1时,错误地遇到了这个问题。它们应该分开
config.before(:each)do DatabaseCleaner.strategy=:transaction end config.before(:each)do DatabaseCleaner.start end
to`config.before(:each)do DatabaseCleaner.strategy=:transaction DatabaseCleaner.start end`
require 'spec_helper'
include Warden::Test::Helpers

describe "...Whatever..." do

  before(:each) do
    @user = Factory.create(:user)
    login_as @user, :scope => :user
  end
  ...