1

我找不到我的问题的解决方案:cant login user in rspec test

我尝试了这段代码,下面是这个链接 - https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs

require 'spec_helper'
require 'factory_girl_rails'

describe "ololo" do

it "blocks unauthenticated access" do

 user = User.create(email: "lol@mail.com", password: "123456")
 request.env['warden'].stub(:authenticate!).
 and_throw(:warden, {:scope => :user})

  visit "/tasks"

  page.should have_content("Signed in successfully.")

end
end

/错误/

Failure/Error: page.should have_content("Signed in successfully.")
   expected there to be text "Signed in successfully." in "Task App Home Login You need to sign in or sign up before continuing. Sign in Email Password Remember me Sign upForgot  

你的密码?Denys Medynskyi 的任务应用程序”

也试过这个链接 - http://codingdaily.wordpress.com/2011/09/13/rails-devise-and-rspec/

设计 wiki 教程也不适合我。

拜托,我几乎没有卡住。帮助我任何人。

4

1 回答 1

1

在没有看到您的错误消息的情况下,我提出一个可能的原因是您创建了用户的硬记录来测试数据库。您可能已经运行了一次此测试,因此第二次创建失败,因为存在具有相同电子邮件的记录。

您需要 FactoryGirl。为什么不使用 FactoryGirl 创建夹具数据?

spec/factories/user.rb

FactoryGirl.define do
  factory :user do
    email: "lol@mail.com"
    password "123"
  end
end

在你的测试中,写

FactoryGirl.create(:user)

添加

与 tut 相比,您缺少两个步骤:

  1. 如上所述,您需要使用 FactoryGirl 替换硬创建的记录。
  2. 您需要sign_in在访问私人页面之前执行该步骤。

仅当您在测试后清除数据库时,您才会对 #2 感到满意。无论如何,建议使用工厂数据而不是硬数据。

于 2013-02-18T18:43:35.233 回答