2013-02-09 3 views
0

테스트에서 가이드 라인이 제대로 작성되지 않아 그 이유를 찾을 수 없습니다.상태 생성 테스트가 실패합니다.

guidelines_controller_test.rb의 테스트는 나는 그것이

실패 테스트를 실행하려고하면

test "should create guideline when logged in" do 
sign_in users(:tester) 
assert_difference('Guideline.count') do 
    post :create, guideline: { content: @guideline.content, hospital: @guideline.hospital, title: @guideline.title } 
end 

가 guidelines_controller.rb의 조치가

def create 
@guideline = Guideline.new(params[:guideline]) 

respond_to do |format| 
    if @guideline.save 
    format.html { redirect_to @guideline, notice: 'Guideline was successfully created.' } 
    format.json { render json: @guideline, status: :created, location: @guideline } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @guideline.errors, status: :unprocessable_entity } 
    end 
end 

입니다 만들 내입니다

 1) Failure: 
test_should_create_guideline_when_logged_in(GuidelinesControllerTest) [test/functional/guidelines_controller_test.rb:36]: 
"Guideline.count" didn't change by 1. 
<4> expected but was 
<3>. 

및 test.log가 표시됩니다 (관련 비트를 복사하려고 시도했습니다)

Processing by GuidelinesController#create as HTML 
    Parameters: {"guideline"=>{"content"=>"www.test.com", "hospital"=>"Test Hospital", "title"=>"Test title"}} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 781720531 LIMIT 1 
    (0.1ms) SAVEPOINT active_record_1 
    Guideline Exists (0.3ms) SELECT 1 AS one FROM "guidelines" WHERE (LOWER("guidelines"."title") = LOWER('Test title') AND "guidelines"."hospital" = 'Test Hospital') LIMIT 1 
    (0.1ms) ROLLBACK TO SAVEPOINT active_record_1 
    Rendered guidelines/_form.html.erb (256.5ms) 
Completed 200 OK in 313ms (Views: 279.2ms | ActiveRecord: 0.8ms) 
    (0.2ms) SELECT COUNT(*) FROM "guidelines" 
    (0.1ms) rollback transaction 

아무도 도와 줄 수 있습니까?

답변

0

이미 존재하는 제목/병원 조합으로 가이드 라인을 만드는 것처럼 보입니다. 당신은 로그의 오른쪽 덩어리를 가지고 -이 라인 :

Guideline Exists (0.3ms) SELECT 1 AS one FROM "guidelines" WHERE [...] 

은 레일이 중복 가이드 라인이 이미 존재하지 않음을 확인하고있다 (당신은 아마도 모델의 "독특한"검증을 참조). 그것은 일치를 발견, 그래서 저장 거래 취소 : 삽입하려는

(0.1ms) ROLLBACK TO SAVEPOINT active_record_1 

변경 제목 및/또는 병원을, 그리고 그것을 잘 통과해야한다.

편집 : 당신은 당신이 당신의 설비에 정의 된 "하나"라는 가이드 라인을로드 @guideline = guidelines(:one)@guideline를 초기화하고 있습니다 : 코멘트에 우리의 대화를 바탕으로

, 나는 다음과 같은 문제가 생각 파일.

그러나 Rails에서 테스트를 시작하면 모든 조명기가 테스트 DB에 자동으로로드됩니다. 따라서 @guideline의 속성을 가진 새로운 지침을 만들려고 시도하면 중복을 보장합니다!

이 주위에 가장 간단한 방법은 테스트 코드에서 인라인 새로운 속성을 정의하는 것입니다 도움이

post :create, guideline: { 
    content: "This is my new content!", 
    hospital: "Some Random Hospital", 
    title: "Some Random Title" 
} 

희망!

+0

빠른 응답을 보내 주셔서 감사합니다. 이것은 올바른 궤도에 있어야하지만 가이드 라인 속성을 변경한다고해도 결과가 동일합니다. '{ "guideline"=> { "content"= "새 내용", "hospital"=> "new hospital", "title "사용자 ID"= 781720531 LIMIT 1 (0.1ms) SAVEPOINT active_record_1 가이드 라인 있음 (0.2 (0)) 사용자로드 (0.3ms) "사용자" "병원"= "새 병원") LIMIT 1 (0.1ms (ms)) "병원"= "새로운 병원") ROLLBACK TO SAVEPOINT active_record_1 ' – tessad

+0

@ user1109434 - Hm. 이 쌍이 이미 존재하지 않는 것이 확실합니까? 아직도 일어난 일에 대한 가장 좋은 설명 인 것처럼 보입니다. "New Whatever"는 여전히 매우 일반적이며 이전에 사용되었을 가능성이 큽니다. 기괴한 것을 시도하십시오 - "Fred"라고 불리는 병원에 대해 "체다"라는 지침을 말하십시오.이미 DB에없는 것을 보장 할 수 있습니다! –

+0

그들이 존재하지 않을 것이라고 확신합니다. guidelines.yml에서 'one :'에 대한 값을 변경하고 동일한 메시지를 얻을 수 있습니다. guidelines_controller.rb에서 실행되는 다른 테스트와 관련이있을 수 있습니까? 나는 실행하기 전에 또 하나의 테스트를 가지고있다 : create. guidelines_controller_test.rb의 맨 위에서 나는 @ guideline = guidelines (: one) end '을 수행합니다. 첫 번째 테스트는이 테스트를 실행하려고 시도 할 때 가이드 라인 (: 하나)을 작성하는 것일 수 있습니다. 가이드 라인이 이미 존재합니까? – tessad

관련 문제