RSpec-2 и Devise - PullRequest
       34

RSpec-2 и Devise

4 голосов
/ 07 октября 2010

Я создаю настроенный контроллер регистрации устройства и хочу проверить его с помощью 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]

у кого-нибудь есть идеи, чтобы решить этупроблема

Ответы [ 2 ]

5 голосов
/ 17 октября 2010

Мой предыдущий ответ немного сбивает с толку. извиняюсь.

Обновленный ответ: основная причина - пользователь не «подтвержден» до «входа».

@user.confirm! 
sign_in @user

тогда все в порядке.

3 голосов
/ 15 февраля 2011

Я более свеж в рубине. Я использую рельсы 3 с разработчиком и заводской девушкой.

Я искал, как аутентифицировать пользователя для rspec.

Я застрял в before_filter: authenticate_user! в контроллере.

Наконец-то я получил решение (спасибо Siwei Shen) То, что я делаю, это

  1. включает TestHelpers в 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
end
...