spec/draper/helper_proxy_spec.rb in draper-1.0.0 vs spec/draper/helper_proxy_spec.rb in draper-1.1.0

- old
+ new

@@ -1,12 +1,42 @@ require 'spec_helper' -describe Draper::HelperProxy do - subject(:helper_proxy) { Draper::HelperProxy.new } - let(:view_context) { Object.new } - before { helper_proxy.stub(:view_context).and_return(view_context) } +module Draper + describe HelperProxy do + describe "#initialize" do + it "sets the view context" do + view_context = double + helper_proxy = HelperProxy.new(view_context) - it "proxies methods to the view context" do - view_context.should_receive(:foo).with("bar") - helper_proxy.foo("bar") + expect(helper_proxy.send(:view_context)).to be view_context + end + end + + describe "#method_missing" do + protect_class HelperProxy + + it "proxies methods to the view context" do + view_context = double + helper_proxy = HelperProxy.new(view_context) + + view_context.stub(:foo).and_return{|arg| arg} + expect(helper_proxy.foo(:passed)).to be :passed + end + + it "passes blocks" do + view_context = double + helper_proxy = HelperProxy.new(view_context) + + view_context.stub(:foo).and_return{|&block| block.call} + expect(helper_proxy.foo{:yielded}).to be :yielded + end + + it "defines the method for better performance" do + helper_proxy = HelperProxy.new(double(foo: "bar")) + + expect(HelperProxy.instance_methods).not_to include :foo + helper_proxy.foo + expect(HelperProxy.instance_methods).to include :foo + end + end end end