Rspec 2 + Devise + Cancan - Factorygirl = Тестирование контроллера не работает - PullRequest
1 голос
/ 15 июня 2011

Я пытаюсь перейти на rspec для тестирования, но не могу заставить тестирование контроллера работать с аутентификацией пользователя. Тестирование маршрута, который не требует работы пользователя.

require 'spec_helper'

describe UddsController do
  include Devise::TestHelpers
  render_views

  before (:each) do
    @user = User.new(:email => "test@user.com", :username => "test123")
    @user.roles << Role.find_or_create_by_name("admin")
    @user.save
    sign_in @user
  end

  it "should get index" do
    get :index
    response.should be_success
  end

Я просто получаю

  2) UddsController should get index
     Failure/Error: response.should be_success
       expected success? to return true, got false
     # ./spec/controllers/udds_controller_spec.rb:21

Я не использую factory_girl. Все примеры исправлений здесь и в гугле кажутся. Я не понимаю, почему то, что я сделал, не сработало. Ошибка бесполезна при отладке.

Я знаю, что этот вопрос был задан до смерти. Я прочитал все блоги и форумы, которые я могу найти. Я в тупике.

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Это может быть перенаправление. be_success возвращает false для любых кодов состояния, отличных от 2xx (например, 302). Попробуйте проверить значение response.status - если оно перенаправляет, это, вероятно, означает, что ваша схема аутентификации или авторизации дает неожиданный результат.

0 голосов
/ 24 июня 2011

Если вы используете «подтверждаемый» модуль devise, который заставляет пользователей щелкать ссылку в электронном письме для подтверждения своего адреса, тогда, когда вы используете «sign_in» в тестах, вы также должны подделать подтверждение электронной почты. Это выглядит примерно так:

sign_in @user
@user.confim!
0 голосов
/ 15 июня 2011

Попробуйте добавить puts response.body перед утверждением и посмотрите, что говорит запрашиваемая вами страница.Если вы не можете понять это оттуда, возможно, отредактируйте свой вопрос, чтобы включить вывод?

...