[rspec-users] shared examples with controllers + included modules?

David Chelimsky dchelimsky at gmail.com
Tue Jun 19 10:16:29 UTC 2012


On Tue, Jun 19, 2012 at 12:16 AM, Patrick J. Collins
<patrick at collinatorstudios.com> 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


More information about the rspec-users mailing list