2012-01-13 3 views
0

내가 배우고 RAIS 작업 : 나는 운동 작업입니다 http://ruby.railstutorial.org/chapters/sign-in-sign-out#fnref:9.14integration_sign_up하지 레일 튜토리얼 책

. 할당은 스펙 헬퍼에 로그인 메소드를 작성하여 통합 테스트에서 사용할 수 있도록합니다. 그는 이미 코드를 주었다

def integration_sign_in(user) 
    visit signin_path 
    fill_in :email, :with => user.email 
    fill_in :password, :with => user.password 
    click_button 
    end 

그래서, 내 layout_links_spec.rb의 통합 테스트에, 나는 그것을 사용할 계획입니다.

before(:each) do 
     @user = Factory(:user) 
     visit signin_path 
     fill_in :email, :with => @user.email 
     fill_in :password, :with => @user.password 
     click_button 
     # integration_sign_in(Factory(:user)) 
    end 

나는 모든 것을 주석 처리하고 integration_sign_in(Factory(:user))을 사용합니다. 내가 오류 내가 integration_sign_in 기능에 아주 유사한 보이는 원본을 사용하는 경우, 시험은 통과, 그러나

ActiveRecord::RecordInvalid: 
     Validation failed: Email has already been taken 

입니다. 누군가 설명해 주시겠습니까?

감사합니다.

답변

1

사용자가 좋아할 때마다 : 사용자 팩토리가 사용자가 될 때마다 동일한 이메일 주소를 반환합니다. 전에 (: 각각) DB를 작성하고 둘 이상의 사용자에게 채워 넣을 것이므로 모두 동일한 이메일을 갖게됩니다.

공장을 게시 한 경우이를 사용하여 시퀀스를 사용하거나 대체 솔루션을 찾을 수 있습니다.

+0

아. 완벽한 설명 My factories.rb는 다음과 같다 : Factory.define : user do | user | user.name "마이클 하틀" user.email "[email protected]" user.password "는 foobar" user.password_confirmation 당신은 user.email 변경 – okysabeni

+0

"는 foobar" 끝 "[email protected]"F에 .sequence (: 이메일) {| n | "foo#{n}@example.com"} – Webjedi

+0

감사합니다. Webjedi! – okysabeni