나는 이미 게시 된 게시물을 저장하려고 시도하는 다음 테스트를 작성했습니다. 사용자가 소식을 게시했으며 이제이를 저장 됨으로 표시하려고 함을 의미합니다. 나는 그것을 허용하지 않는다.렌더링을 렌더링하거나 렌더링을 두 번 호출하는 이유는 무엇입니까?
it "should not update a post from published to saved" do
@post = FactoryGirl.create(:post, blog_id: @blog.id, saved: false, published: true)
put :update, :id => @post.id, post: {title: 'Sample Title', content: @post.content, saved: true}
expect(response.status).to eql 422
end
이 특정 테스트 상태 :
는def post_controller_save(post, params)
do_not_save_published_post(post, params)
binding.pry
publish_post(post, params)
if post.save
set_tags(post, params)
set_categories(post, params)
render json: post, status: 200
else
render json: {:errors => post.errors}, status: 422
end
end
우리가 할 첫 번째 검사는 do_not_save_published_posts(post, params)
입니다 : 우리가 방법을 보면 던지는 이잖아 때문에 경우 안
AbstractController::DoubleRenderError: Render and/or redirect were called multiple times in this action.
(그 후에 binding.pry
에 주목하십시오).
def do_not_save_published_post(post, params)
if (post.published && params[:post][:saved])
binding.pry
render json: {:errors => 'Cannot save a published post.'}, status: 422
return
end
end
이 방법 검사 문제의 게시물이 게시 된 경우 : 우리는이를 따르는 경우
그래서, 우리는 (개인 방법입니다) 문제의 방법을 참조하십시오. 게시 개체에 대한 params에는 저장된 매개 변수가 포함되어 있습니다. 두 가지 모두 사실이라면 오류를 렌더링하고 반환합니다. 여기에서 중요한 것은이 binding.pry
에 주목하는 것입니다.
테스트에서이 중단 점에 도달 한 다음 exit
을 입력하면 반환을 건너 뛰고이 메서드의 바깥 쪽이 캐치됩니다.
이렇게해서는 안됩니다. 그것은 나를 422의 상태로 json으로 렌더링해야합니다. 사실, do_not_save_published_post
은 개인적인 방법으로 기여하는 요소입니까?