2012-10-11 4 views
3

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 

참고 :

답변

1

훨씬 읽기와 반복 한 후,이 작품은 무엇입니까 have_json_nodeapi_matchers gem에서 온다.

0

assigns 메소드는 인스턴스 변수를 설정합니다.보기는 user.first_name 대신 @ user.first_name이어야하며, 그렇지 않으면 부분적입니까? 그것이 부분적이라면 render : partial => ...을 사용해야한다. 템플릿이라면 @user를 사용해야한다.

관련 문제