code

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

codestyles 2020. 8. 25. 08:04
반응형

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


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

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

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

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


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

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

describe YourController do
  render_views
  ...
end

RSpec 2+ : 응답 본문에 대한 종단 URL을 확인하려면 컨트롤러 사양 대신 요청 사양을 사용하십시오 .


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

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

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

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

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

건배,

남자


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

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

RSpec.configure do |config|
  config.render_views
end

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

describe User do
  render_views
end

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

참고 URL : https://stackoverflow.com/questions/1063073/rspec-controller-testing-blank-response-body

반응형