2009-02-06 5 views
3

이 테스트가 실패한 이유를 이해하려고합니다. (필자는 테스트에 익숙하지 않습니다.) Shoulda 젬을 추가하여 빌트인 Rails 테스팅 프레임 워크를 사용하고 있습니다.왜이 레일 컨트롤러 테스트가 실패합니까?

테스트 :

require 'shoulda' 

context "on GET to :new" do 

    setup do 
    get(:new) 
    end 

    should_render_template :new 
    should_not_set_the_flash 

end 

실패 :

1) Failure: 
test: on GET to :new should render template :new. (SessionsControllerTest) 
[/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/controller /macros.rb:220:in `__bind_1233882600_699194' 
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `call' 
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `test: on GET to :new should render template :new. ' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run']: 
expecting <"new"> but rendering with <""> 

2 tests, 2 assertions, 1 failures, 0 errors 

하지만 app.get '/sessions/new'와 콘솔에서 실행하는 경우이 오류없이 잘 작동합니다.

"new"템플릿이 브라우저에서 예상대로 렌더링됩니다.

나는 Haml을 사용하고 있습니다. 문제가 생길 수 있습니다. 내 템플릿은 "new.html.haml"입니다.

답변

8

오류로 인해 템플릿이 렌더링되지 않았다고 표시됩니다. 그냥 보냈 무엇을보고 당신이

should_respond_with :success 

로 리디렉션되지 않습니다 확인하기 위해 시도하고 @의 response.body의 내용을 주장

# This will fail but should give you some clue about what was sent back. 
should "sent something back in the body" do 
    assert_match 'boohooo', @response.body 
end 

또한 특정 템플릿을 주장 할 수 있으므로,

should_render_template "new.html.haml" 

그러나 HAML이 문제의 원인이라고 의심하지 않습니다.

+0

감사합니다. 당신이 제안한 assert_match 호출은 그것을 해결했습니다. 나는 물건을 엉망으로 만들고있는 필터를 잊었다. – Ethan

0

Shoulda, Clearance 및 Rails 2.3.2와 비슷한 문제가있었습니다. 나는 shoulda와 clearance가 'assert_template'을 어떻게 사용하는지 수정함으로써이 문제를 해결했다고 생각한다. 분명히 이것과 관련된 레일스의 오픈 버그가 있습니다.

변경 사항에 대한 자세한 정보와 차이점은 Clearance와 Shoulda에서 한 줄씩 변경하십시오.

http://groups.google.com/group/shoulda/browse_thread/thread/8c0a66c80ff4fd76