4

カスタマイズされたデバイス登録コントローラーを作成し、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]

誰かがこの問題を解決するためのアイデアを持っていますか?

4

2 に答える 2

5

私の以前の答えは少し紛らわしいです。ごめん。

更新された回答:根本的な原因は、ユーザーが「サインイン」する前に「確認」されていないことです。

@user.confirm! 
sign_in @user

その後、すべてが大丈夫です。

于 2010-10-17T07:46:31.813 に答える
3

私はルビーの方が新鮮です。私はデバイスとファクトリーガールでレール3を使用しています。

rspecのユーザーを認証する方法を探していました。

before_filterで立ち往生しました:authenticate_user!コントローラーで。

ついに私は解決策を得ました(Siwei Shenのおかげで)私がしていることは

  1. spec/spec_helper.rbにTestHelpersを含めます

2.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
end
于 2011-02-15T10:59:52.913 に答える