jbuilder를 사용하여 작성한 템플릿을 테스트하기 위해 RSpec 테스트를 작성하려고합니다. 궁극적으로 내 API 용 JSON 데이터를 제공합니다. 내 컨트롤러 기능을 테스트하는 spec/controllers
에 많은 테스트가 있지만 내 jbuilder 뷰에서 정확한 JSON 필드를 렌더링하는지 테스트하고 싶습니다. 여기에 내가 설정이 무엇의 예입니다RSpec을 사용하여 jbuilder 뷰를 테스트 할 때 변수를 할당하는 방법
# app/views/api/v1/users/create.json.jbuilder
json.first_name user.first_name
# spec/views/api/v1/users/create.json.jbuilder_spec.rb
require 'spec_helper'
describe "api/v1/users/create.json.jbuilder" do
it "renders first_name" do
assign(:user, User.create(:first_name => "Bob"))
render
hash = JSON.parse(rendered)
hash.has_json_node(:first_name).with("Bob")
end
end
내가 rspec spec/views/api/v1/users/create.json.jbuilder_spec.rb
를 실행할 때 내가 할 것은 다음과 같은 오류가
Failures:
1) api/v1/users/create.json.jbuilder render a user
Failure/Error: render
ActionView::Template::Error:
undefined local variable or method `user' for #<#<Class:0x007fa2911c3118>:0x007fa29105f2b8>
# ./app/views/api/v1/users/create.json.jbuilder:1:in `_app_views_api_v__users_create_json_jbuilder___3806288263594986646_70168098229960'
# ./spec/views/api/v1/users/create.json.jbulder_spec.rb:6:in `block (2 levels) in <top (required)>'
상관없이 나는 user
개체를 전달/생성/할당하는 시도 방법 템플릿에 적용하면 실패합니다. 내가 뭘 잘못하고 있을지 모르겠다.
require 'spec_helper'
describe "api/v1/users/create.json.jbuilder" do
let(:user) { User.create(:not_strict => true) }
it "renders first_name" do
render :template => "api/v1/users/create", :locals => { :user => user }, :formats => :json, :handler => :jbuilder
rendered.should have_json_node(:first_name).with(user.first_name)
end
end
참고 :