我创建了一个定制的devise注册控制器,我想用rspec来测试它。
我用一个非常简单的测试来尝试它:
it "creates a new parent" do
Parent.should receive(:new)
post :create
end但是我得到了一个例外:
Failures:
1) Parent::RegistrationsController POST create creates a new parent
Failure/Error: post :create, { :commit => "Daftar",
uncaught throw `warden'
# /home/starqle/.rvm/gems/ree-1.8.7-2010.02/gems/devise-1.1.3/lib/devise/hooks/timeoutable.rb:16:in `throw'
# /home/starqle/.rvm/gems/ree-1.8.7-2010.02/gems/devise-1.1.3/lib/devise/hooks/timeoutable.rb:16我已经在我的测试中放入了这一行:
describe Parent::RegistrationsController do
include Devise::TestHelpers
end我也已经把这一行:
request.env["devise_mapping"] = Devise.mappings[:parent]有谁有办法解决这个问题吗?
发布于 2010-10-17 15:46:32
我之前的回答有点令人困惑。抱歉的。
更新答案:根本原因是用户在“登录”前没有“确认”。
@user.confirm!
sign_in @user那么一切都很好。
发布于 2011-02-15 18:59:53
我穿红宝石比较新鲜。我使用的是Rails3和devise and factory girl。
我在搜索如何验证rspec的用户。
我被困在了before_filter: authenticate_user!在控制器中。
最后我得到了解决方案(感谢沈思伟)我正在做的是
在spec/spec_helper.rb中包含
2.
require 'spec_helper'
describe StudentsController do
before(:each) do
@user = Factory.create(:user) #:user from factory girl with admin privilages
@request.env['devise.mapping'] = :user
@user.confirm!
sign_in @user
end
it "can get index of student" do
get :index
response.should be_suclogin_as @user
end
it "can create student" do
#in student model : validates :name, :presence=> true
post :create, :student => {name => "student1" }
answer = Student.find_by_name("student1")
answer.name.should == "student1"
end
endhttps://stackoverflow.com/questions/3878337
复制相似问题