2012-04-27 1 views
0

Я новичок в RSpec и что-то, с чем я постоянно сталкиваюсь, понимает, какие записи находятся в/из области видимости. Ниже приведен пример. Я создаю серию записей через FactoryGirl. Например, я создаю пользователя, а затем в блоке before I sign_in с этим пользователем. Это всегда работает нормально. Но всякий раз, когда я начинаю пытаться использовать записи, являющиеся дочерними элементами ранее созданных записей, я, похоже, попал в неприятности. Например, с группой. Для группы требуется пользователь и тип group_type. Всякий раз, когда я пытаюсь что-то сделать с такими типами записей, я нажимаю ошибку «Вызывается id для нуля». Я попытался «puts group.name», и я вижу, что группа создается, но по какой-то причине после того, как строка «visit group_path (group)» выполняет запись, больше не существует. Я знаю, что мне не хватает чего-то довольно фундаментального. Цените любую помощь, так как это сводит меня с ума.RSpec, связанный с дочерней записью в запросе spec

describe "activities page" do 
    let(:user) { FactoryGirl.create(:user) } 
    let!(:group_type) { FactoryGirl.create(:group_type) } 
    let!(:group) { FactoryGirl.create(:group, user: user, group_type: group_type) } 

before do  
    sign_in user 
    visit group_path(group) 
    click_button "Check In" 
end 

Ошибка:

1) Activity pages activities page 
Failure/Error: visit group_path(group) 
RuntimeError: 
    Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

Добавление группы шоу метод:

def show 
    @group = Group.find(params[:id]) 
    @members = @group.members.paginate(page: params[:page]) 
    cookies[:group_id] = @group.id 

    # Set Pusher chat 
    @chat = Chat.find_by_group_id(@group.id) 
    @user = current_user 
    @messages = Message.find(:all, :conditions => ["chat_id = ?", @chat.id.to_s]) 
end 
+0

Как выглядит метод 'show' в вашем GroupController? –

+0

Добавлено выше. Спасибо, что посмотрели. – pejmanjohn

+0

Является ли '@ chat' ноль? Ваш тест, похоже, не создает чатов, связанных с создаваемыми ими группами. –

ответ

0

Я считаю, что проблема здесь заключается в том, вы используете let!. Разница между ними в том, что версия non bang ленива. Его оценивают только тогда, когда требуется переменная.
Перед каждым примером вызывается версия bang. Проблема здесь в том, что порядок - не ленивые примеры. Я действительно не думаю, что вы можете гарантировать заказ, которым они управляют. В вашем случае я верю, что let! (: Group) запускается до запуска! (Group_type), вызывающего этот сбой.

 Смежные вопросы

  • Нет связанных вопросов^_^