[rspec-users] Testing controller plugin
Matt Wynne
matt at mattwynne.net
Mon Feb 8 12:17:55 EST 2010
On 8 Feb 2010, at 16:53, David Chelimsky wrote:
> On Mon, Feb 8, 2010 at 11:58 AM, Phillip Koebbe <phillipkoebbe at gmail.com
> > wrote:
>> Matt Wynne wrote:
>>>
>>> Yeah, you need to convince RSpec that the describe blocks you're
>>> using are
>>> describing an ExampleGroup that's about a Rails Controller, then
>>> it will mix
>>> in the right methods for you. I think you can do something like:
>>>
>>> describe MySpecialTestController, :type => :controller do
>>> end
>>>
>>> That's the general idea. I think someone else on the list will be
>>> able to
>>> help more than me with the specifics.
>>>
>>> As for a plug-in, I don't know any off-hand... try a few popular
>>> ones out
>>> on github and look for a spec directory in the root I guess.
>>>
>>
>> Thanks, again, Matt for taking the time to respond. I was kind of
>> surprised
>> by how many plugins use test::unit. I did finally find subdomain_fu
>> [1] and
>> was able to get something working. However, this approach tests the
>> controller in a project and requires rspec-rails to be installed
>> for the
>> project. I would really like to be able to test this independent of a
>> project. So if anyone knows how to test a controller plugin with
>> RSpec
>> independent of a project, I'd really appreciate some pointers.
>
> The problem I've run into in trying to spec controller extensions in
> isolation is that Rails controllers are not self-contained objects:
> they need a bunch of surrounding state set up for them to work
> properly. The testing facilities that ship with Rails hide that all
> from you, but they do a lot of work for you in every test method, or
> rspec code example.
>
> In theory, you should be able to say:
>
> =================================
> require 'rubygems'
> require 'action_controller/base'
>
> class SomeController < ActionController::Base
> def index
> render :text => "this text"
> end
> end
>
> describe SomeController do
> describe "index" do
> it "returns some text" do
> c = SomeController.new
> c.index.should == "this text"
> end
> end
> end
> =================================
>
> When you do, however, you get this:
>
> uninitialized constant ActionController::Metal (NameError)
>
> Try to solve that and you'll be starting down a deep rabbit hole. And
> even if you do solve that, the next rails release may well break
> whatever you did to solve it. The safest bet is to spec your plugin in
> the context of a complete rails app.
So maybe we just need to build a library of helpers that make it easy
to create a modified rails app in Cucumber features?
> That said, I'd love to make this easier to do with rspec, but I won't
> have cycles to drive this for quite some time. If anyone else is
> interested in driving this, speak up and I'll be happy to assist.
>
> Cheers,
> David
>
>
>>
>> Here's what I have right now:
>>
>> http://gist.github.com/298281
>>
>> Thanks,
>> Phillip
>>
>>
>> [1] http://github.com/mbleigh/subdomain-fu
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
cheers,
Matt
http://mattwynne.net
+447974 430184
More information about the rspec-users
mailing list