dchelimsky / rspec-rails

RSpec extension library for Ruby on Rails

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

infer base_class for anonymous controller

bjeanes opened this issue · comments

Given the following contrived spec, designed to test the Admin::BaseController behavior (through a subclass)

# Admin::BaseController is not-routed. Superclass of all Admin controllers
describe Admin::BaseController do
  controller(Admin::BaseController) do
    def index
      render :text => "ok"
    end
  end

  it "denies acces" do
    get :index
    request.should_not be_ok
  end
end

The controller method call expects a base class argument to make the spec work as expected. However, I've already declaratively stated the controller whose behavior I wish to describe in the describe block.

I put forth that this can be inferred by changing the default argument to controller_class instead of ApplicationController, providing this doesn't present a large backwards-compatibility issue.


IRC conversation to jog your memory about our discussion, if needed:

[14:23] <dchelimsky> so there are two controller methods
[14:23] <dchelimsky> one at the class level (which is the one you're talking about)
[14:23] <bjeanes__> right, one in a spec, and one in a spec group
[14:23] <dchelimsky> exactly
[14:24] <bjeanes__> unless they are tied together in a way I don't realize, I'm just speaking about the specgroup one
[14:24] <dchelimsky> they are tied together
[14:24] <dchelimsky> the example method provides an instance of the controller class being described
[14:24] <bjeanes__> yup
[14:25] <dchelimsky> the group method lets  you specify a base class to work from
[14:25] <dchelimsky> but you don't need that under normal circumstances
[14:25] <dchelimsky> if you say "describe FooController", then the example method gives you an instance of that
[14:25] <bjeanes__> yup I realize that
[14:26] <dchelimsky> guess I don't understand what you're trying to do
[14:26] <bjeanes__> my interpretation of the specgroup controller method was to give you an interface for testing behaviour of non-routable controllers like ApplicationController (or others, in my case)
[14:26] <bjeanes__> e.g. Admin::BaseController
[14:26] <dchelimsky> in which case you can pass it Admin::BaseController
[14:26] <bjeanes__> that very much seems to be the example in the code comment anyway
[14:27] <bjeanes__> which is what I am doing, but I'm already wrapping that controller call in `describe Admin::BaseController`
[14:27] <dchelimsky> oh I see
[14:27] <dchelimsky> you want it to infer that from the described class
[14:27] <dchelimsky> got it
[14:27] <dchelimsky> let me think about that
[14:27] <bjeanes__> so I'm wondering why there is a use-case for it to default to an ApplicationController subclass when I've already declaratively stating which controller's behaviour I wish to describe
[14:27] <dchelimsky> not sure I want to add anything implicit there
[14:27] <bjeanes__> yeah I don't mind either way, just curious
[14:28] <bjeanes__> anywho thanks for listening
[14:29] <dchelimsky> sure - thanks for explaining
[14:29] <bjeanes__> love the direction rspec has taken recently in helping me make my specs nice and clear
[14:29] <dchelimsky> I think it's probably a good idea, had it been that way from the beginning
[14:29] <bjeanes__> if this is a place to improve that, awesome... if not, no biggy
[14:29] <bjeanes__> sure, I can see that
[14:29] <dchelimsky> I need to think about what the risk would be to make the change
[14:29] <bjeanes__> alrighty
[14:29] <dchelimsky> would  you do me a favor and file a feature request for it?
[14:30] <dchelimsky> or call it a bug report, if you prefer ;)

I think this is the right way to go, but it has the potential to break existing specs, so let's do this in the 3.0 release (whenever we get to it).

Oh - just realized this is the rspec-rails-1 tracker - would you do me one more favor and repost this at http://github.com/rspec/rspec-rails/issues? That way it's still coming from you and you'll get notified w/ updates.

Sure, sorry for the delay. I'm re-opened it in the other tracker.

rspec/rspec-rails#421