require 'spec_helper' describe Gon do describe '.jbuilder' do context 'render jbuilder templates' do before do Gon.clear controller.instance_variable_set('@objects', objects) end let(:controller) { ActionController::Base.new } let(:objects) { [1, 2] } it 'render json from jbuilder template' do Gon.jbuilder 'spec/test_data/sample.json.jbuilder', :controller => controller Gon.objects.length.should == 2 end it 'render json from jbuilder template with locals' do Gon.jbuilder 'spec/test_data/sample_with_locals.json.jbuilder', :controller => controller, :locals => { :some_local => 1234, :some_complex_local => OpenStruct.new(:id => 1234) } Gon.some_local.should == 1234 Gon.some_complex_local_id.should == 1234 end it 'render json from jbuilder template with locals' do Gon.jbuilder 'spec/test_data/sample_with_helpers.json.jbuilder', :controller => controller Gon.date.should == 'about 6 hours' end it 'render json from jbuilder template with controller methods' do pending controller.instance_eval { def private_controller_method puts 'gon test helper works' end private :private_controller_method } Gon.jbuilder 'spec/test_data/sample_with_controller_method.json.jbuilder', :controller => controller Gon.date.should == 'about 6 hours' end it 'render json from jbuilder template with a partial' do controller.view_paths << 'spec/test_data' Gon.jbuilder 'spec/test_data/sample_with_partial.json.jbuilder', :controller => controller Gon.objects.length.should == 2 end end it 'should raise error if you use gon.jbuilder without requiring jbuilder gem' do Gon.send(:remove_const, :Jbuilder) expect { Gon.jbuilder 'some_path' }.to raise_error load 'jbuilder.rb' load 'gon/jbuilder.rb' end end def request @request ||= double 'request', :env => {} end end