RSpec 컨트롤러 테스트-빈 response.body


103

RSpec으로 컨트롤러를 테스트 할 때 문제가 발생했습니다. response.body 호출은 항상 빈 문자열을 반환합니다. 브라우저에서 모든 것이 올바르게 렌더링되고 오이 기능 테스트가 제대로 된 것처럼 보이지만 RSpec은 매번 실패합니다.

응답 객체에 대한 기타 기대 (예 : response.should render_template('index')문제없이 통과)

전에이 문제가 발생한 적이 있습니까? 아마도 다른 방법으로 응답 html을 얻을 수 있습니까?

버전은 Rails 2.1.0, RSpec 1.2.7입니다.

답변:


194

기본적으로 rspec-rails 는 실제로 뷰 템플릿을 렌더링 하지 못하도록 Rails를 해킹 합니다. 액션의 동작을 테스트하고 템플릿 렌더링의 결과가 아닌 컨트롤러 테스트를 필터링해야합니다. 이것이 뷰 사양의 목적입니다.

그러나 컨트롤러 사양에서 앱이 일반적으로하는 것처럼 템플릿을 렌더링하도록하려면 다음 render_views지시문을 사용하십시오 .

describe YourController do
  render_views
  ...
end

2
고마워요, 정확히 제가 필요했던 것입니다.
Toms Mikoss

2
저는 Rails와 수년간 일 해왔고 이제 마침내 컨트롤러와 요청 사양의 차이점을 이해했습니다. 감사!
Brian Underwood


2

비슷한 문제로 작업하면서 (이 질문으로 이어졌습니다) 같은 고양이를 피부로 만드는 데는 여러 가지 방법이 있다는 것을 알게되었습니다. 즉, 본문을 확인하지 않고 플래시 내용을 확인할 수 있습니다.

response.body.should =~ /Invalid email or password/

다음과 같은 검사일 수 있습니다.

flash[:alert].should == "Invalid email or password"

나에게 후자는 어느 쪽이든 실행되므로 약간 더 유연 해 보이지만 모든 경우에 적절하지 않을 수 있습니다.

건배,

남자


2

기본적으로 RSpec-rails 구성은 컨트롤러 사양에 대한 템플릿 렌더링을 비활성화합니다.

이 문제를 해결하는 방법 중 하나는 파일 에서 render_views설정 을 활성화하는 것 rails_helper.rb입니다. 이러한 방식으로 모든 테스트에서 전역 적으로 작동 할 수 있습니다.

RSpec.configure do |config|
  config.render_views
end

또는 개별 그룹에 render_views 선언을 사용합니다.

describe User do
  render_views
end

여기에서 이에 대한 자세한 내용을 읽을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.