2012-04-27 4 views
0

RSpec을 처음 접했고 지속적으로 문제가되는 것은 레코드가 범위를 벗어 났는지 이해하는 것입니다. 아래 예제를 참조하십시오. FactoryGirl을 통해 일련의 레코드를 생성합니다. 예를 들어 사용자를 만든 다음 이전 블록에서 해당 사용자와 sign_in합니다. 이것은 항상 정상적으로 작동하는 것 같습니다. 그러나 이전에 만든 레코드의 하위 레코드 인 레코드를 사용하기 시작할 때마다 문제가 생기는 것 같습니다. 예를 들어 그룹. 그룹에는 사용자 및 group_type이 필요합니다. 이러한 종류의 레코드로 무언가를하려고 할 때마다 "호출 된 ID는 무효"오류가 발생합니다. "puts group.name"을 시도했는데 그룹이 생성되고 있음을 알 수 있습니다. 그러나 "visit group_path (group)"행이 레코드를 더 이상 실행하지 않으면 어떤 이유로 인해 발생합니다. 나는 여기서 근본적인 무언가를 놓치고 있다는 것을 알고있다. 이것이 나를 미치게 만들었으니 어떤 도움을 주셔서 감사합니다.요청 사양의 하위 레코드를 참조하는 RSpec

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

GroupsController의'show' 메소드는 어떻게 생겼습니까? –

+0

위에 추가되었습니다. 봐 주셔서 감사합니다. – pejmanjohn

+0

'@ chat '은 (는) 사용하지 않고 있습니까? 테스트를 통해 생성 된 그룹과 관련된 모든 채팅이 생성되지 않는 것 같습니다. –

답변

0

나는 여기에 문제가 당신이 let!을 사용하고있는 사실이다 생각합니다. 그들 사이의 차이점은 비폭력 버전이 게으른 것입니다. 변수가 필요할 때만 평가됩니다.
각 예제 앞에 bang 버전이 호출됩니다. 여기에서 문제는 비 게으른 예제의 순서입니다. 나는 그들이 당신이 달리는 순서를 보장 할 수 있다고 생각하지 않습니다. 귀하의 경우에 let! (: group)이 run! 전에 let! (group_type)가 실행되어이 실패가 발생한다고 생각합니다.

관련 문제