On Tue, Jun 19, 2012 at 12:16 AM, Patrick J. Collins
<[email protected]> wrote:
> Hi everyone,
>
> I ran into a little problem this evening and couldn't quite figure out
> how to solve it...
>
<snip/>
> So, then I had a controller test like:
>
> describe FooController do
> it_behaves_like "omg", subject
> end
>
> ...
>
> shared_example "omg" do |obj|
<snip/>
>
> it "gets something" do
> Something.stubs(:new).returns "lol"
> get :show
> obj.something.should == "lol"
> end
> end
>
> .........
>
> So this failed, and I saw-- ok-- subject apparently isn't a real
> instance of the controller outside of an "it" block...... It's a proc
> of some kind, and I didn't know what to do with it-- so I changed my
> test code slightly:
>
> describe FooController do
> it_behaves_like "omg", FooController.new
> end
>
> ... and I got a failure, and upon inspecting, I found that in side the
> context of the shared examples, the "obj" variable was not the same
> controller instance as the one performing the get :show... So
> obj.something never equalled "lol", because it never got its setter
> method called..
>
> So I said to mself: "????????"
>
> and thought I'd ask here:
>
> How can I refernence the real subject link this inside a shared example?
Assuming this is a controller spec, you can reference the controller
via the `controller` method (courtesy of
ActionController::TestCase::Behavior [1][2][3]):
shared_examples "omg" do
it "gets something" do
Something.stubs(:new).returns "lol"
get :show
controller.something.should == "lol"
end
end
describe FooController do
it_behaves_like "omg"
end
HTH,
David
[1]
https://github.com/rspec/rspec-rails/blob/9abdc0a588a78d3cd50bb58ce719ce72f9af34e1/lib/rspec/rails/example/controller_example_group.rb#L9
[2]
https://github.com/rspec/rspec-rails/blob/9abdc0a588a78d3cd50bb58ce719ce72f9af34e1/lib/rspec/rails/example/controller_example_group.rb#L77
[3]
https://github.com/rails/rails/blob/c1b1956a15d3d38d0a4504e168bb69638d71e536/actionpack/lib/action_controller/test_case.rb#L508
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users