spec/gon/basic_spec.rb in gon-5.1.2 vs spec/gon/basic_spec.rb in gon-5.2.0
- old
+ new
@@ -206,12 +206,104 @@
"\n//]]>\n" +
'</script>'
)
end
+ it 'outputs correct js with namespace check' do
+ expect(@base.include_gon(namespace_check: true)).to eq( \
+ '<script type="text/javascript">' +
+ "\n//<![CDATA[\n" +
+ 'window.gon=window.gon||{};'\
+ "\n//]]>\n" +
+ '</script>'
+ )
+ end
+
+ it 'outputs correct js without namespace check' do
+ expect(@base.include_gon(namespace_check: false)).to eq( \
+ '<script type="text/javascript">' +
+ "\n//<![CDATA[\n" +
+ 'window.gon={};'\
+ "\n//]]>\n" +
+ '</script>'
+ )
+ end
+
+ context "without a current_gon instance" do
+
+ before(:each) do
+ RequestStore.store[:gon] = nil
+ allow(Gon).to receive(:current_gon).and_return(nil)
+ end
+
+ it "does not raise an exception" do
+ expect { @base.include_gon }.to_not raise_error(Exception)
+ end
+
+ it 'outputs correct js' do
+ expect(@base.include_gon).to eq("")
+ end
+
+ it 'outputs correct js with init' do
+ expect(@base.include_gon(init: true)).to eq( \
+ '<script type="text/javascript">' +
+ "\n//<![CDATA[\n" +
+ 'window.gon={};'\
+ "\n//]]>\n" +
+ '</script>'
+ )
+ end
+
+ end
+
+
end
+ describe '#include_gon_amd' do
+
+ before(:each) do
+ Gon.clear
+ Gon::Request.
+ instance_variable_set(:@request_id, request.object_id)
+ @base = ActionView::Base.new
+ @base.request = request
+ end
+
+ it 'is included in ActionView::Base as a helper' do
+ expect(ActionView::Base.
+ instance_methods.
+ map(&:to_s).
+ include?('include_gon_amd')).to eq(true)
+ end
+
+ it 'outputs correct js without variables' do
+ expect(@base.include_gon_amd).to eq( wrap_script( \
+ 'define(\'gon\',[],function(){'+
+ 'var gon={};return gon;'+
+ '});')
+ )
+ end
+
+ it 'outputs correct js with an integer' do
+ Gon.int = 1
+
+ expect(@base.include_gon_amd).to eq( wrap_script(
+ 'define(\'gon\',[],function(){'+
+ 'var gon={};gon[\'int\']=1;return gon;'+
+ '});')
+ )
+ end
+
+ it 'outputs correct module name when given a namespace' do
+ expect(@base.include_gon_amd(namespace: 'data')).to eq(wrap_script(
+ 'define(\'data\',[],function(){'+
+ 'var gon={};return gon;'+
+ '});')
+ )
+ end
+ end
+
it 'returns exception if try to set public method as variable' do
Gon.clear
expect { Gon.all_variables = 123 }.to raise_error
expect { Gon.rabl = 123 }.to raise_error
end
@@ -235,8 +327,16 @@
end
end
def request
@request ||= double 'request', :env => {}
+ end
+
+ def wrap_script(content, type='text/javascript', cdata=true)
+ script = "<script type=\"#{type}\">"
+ script << "\n//<![CDATA[\n" if cdata
+ script << content
+ script << "\n//]]>\n" if cdata
+ script << '</script>'
end
end