2010-11-02 4 views
1

есть некоторый ressource на github How To: Test (devise) with Rails 3 and RSpec. , но как это очень высокий уровень, и я не могу заставить его работать в моем контексте. Каким образом можно подключить или сконфигурировать все эти части вместе, чтобы протестировать контроллер, требующий зарегистрированного пользователя (before_filter: authenticate_user!) ???проблема с factory_girl, devise, rpsec 2.0 и rails 3.0 => не может получить rspec для проверки контроллера

Сейчас я пытаюсь запустить 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 

ответ

0

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

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

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

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

0

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

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 и вашим методом?