проблема с factory_girl, devise, rpsec 2.0 и rails 3.0 => не удается получить rspec для проверки контроллера - PullRequest
1 голос
/ 02 ноября 2010

есть ресурсы на github Как: Тестировать (разрабатывать) с Rails 3 и RSpec .но как это очень высокий уровень, и я не могу заставить его работать в моем контексте.Как правильно подключить или настроить все эти части вместе, чтобы можно было протестировать контроллер, требующий регистрации пользователя (before_filter: authenticate_user!) ???

Пока я пытаюсь запустить rspec на одном контроллере..

require File.dirname(__FILE__) + '/../spec_helper'
describe ArticlesController do
  fixtures :all
  render_views

  before (:each) do
    @user = Factory.create(:user)
    sign_in @user
  end

  it "index action should render index template" do
    get :index
    response.should render_template(:index)
  end
end

вот вывод, когда я запускаю rspec

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: Unable to find matching line from backtrace
     SQLite3::ConstraintException: articles.user_id may not be NULL

Ответы [ 2 ]

0 голосов
/ 02 ноября 2010

Я исправил прибор или должен сказать фабрику следующим образом:

Factory.define :article do |e|
  e.name "Article001"
  e.user { |u| u.association(:user) }
end

, которые дают мне эту новую ошибку ...

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: response.should render_template(:index)
     expecting <"index"> but rendering with <"devise/mailer/confirmation_instructions">.
     Expected block to return true value.

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

Я попробовал ваше предложение, но остановился на "заглушке"

Failure/Error: Asset.stub(:find).and_return([])
     undefined method `stub' for #<Class:0x000000048310b8>

Каков наилучший подход между fixture:all и вашимметод?

0 голосов
/ 02 ноября 2010

Похоже на ошибку в ваших светильниках.В сообщении об ошибке говорится, что он не может создать статью без user_id.

Вы можете либо исправить приборы, либо отказаться от их использования, удалив fixtures :all и указав метод find:

before(:each) do
  @user = Factory.create(:user)
  sign_in @user
  Article.stub(:find).and_return([])
end

Это говорит find о возврате пустого массива, который действие индекса вашего контроллера должно назначить переменной экземпляра @articles для использования в шаблоне.Этого должно быть достаточно, чтобы шаблон отображался без ошибок.

...