[rspec-users] Separating black sheep examples from the rest

Scott Taylor mailing_lists at railsnewbie.com
Tue Sep 23 22:01:46 EDT 2008


On Sep 23, 2008, at 11:49 AM, Pat Maddox wrote:

> Matt Wynne <matt at mattwynne.net> writes:
>
>> So we've got a pretty decent number of specs now, and despite my  
>> best efforts,
>> AR is just forcing us down the path of having to use database  
>> interaction for
>> some of the model specs.
>>
>> It's starting to get tiring to run all the specs now, which is  
>> making me sad,
>> and making me worry about how things are going to be in a few  
>> months from now.
>>
>> I'd like to somehow be able to systematically mark the slow example  
>> groups as
>> being 'impure' and thus be able to choose to mostly ignore them  
>> during my
>> regular TDD cycle, just running them every so often as a regression.
>>
>> I'm thinking something like this:
>>
>> describe "when there are ten users in the database", :slow => true do
>>
>> What do you think? How are other people solving this problem? Any  
>> tips /
>> thoughts on how I could implement this?
>
> Why don't you put the specs in a different directory?  One layout that
> I've seen used (I think by the WePlay guys) is:
>
> spec/
>  integration/
>    controllers/
>    models/
>  unit/
>    controllers/
>    models/

Yeah - Bryan and I paired @ Eastmedia before he left for WePlay to  
develop the following monkey patch to support that:

module Spec
   module Example
     class ExampleGroupFactory
       # Used to support spec/unit and spec/integration
       def self.determine_superclass(opts)
         spec_path = opts[:spec_path].to_s.gsub("/spec/unit", "/spec")

         id = if opts[:type]
           opts[:type]
         elsif spec_path =~ /spec\/integration\/routing_spec/
           :controller
         elsif spec_path =~ /spec\/integration/
           :model
         elsif spec_path =~ /spec(\\|\/)(#{@example_group_types.keys.join 
('|')})/
           $2 == '' ? nil : $2.to_sym
         end
         get(id)
       end
     end
   end
end

Hopefully someone will find this useful.

Scott



More information about the rspec-users mailing list