[rspec-users] Trying to spec all models

Phillip Koebbe phillipkoebbe at gmail.com
Thu Sep 16 22:01:35 EDT 2010


  On 2010-09-16 8:24 PM, Ed Howland wrote:
>   On Thu, Feb 11, 2010 at 7:15 AM, Phillip Koebbe<phillipkoebbe at gmail.com>  wrote:
>> David Chelimsky wrote:
>>> On Thu, Feb 11, 2010 at 12:13 AM, Mike Sassak<msassak at gmail.com>    wrote:
>>>
>>>> On Wed, Feb 10, 2010 at 10:17 PM, Phillip Koebbe
>>>> <phillipkoebbe at gmail.com>    wrote:
>>>>
>>>>> When I do
>>>>>
>>>>> script/spec -c -f n  spec/models/**/*_spec.rb
>>>>>
>>>>> I get
>>>>>
>>>>>
>>>>> /Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/options.rb:283:in
>>>>> `files_to_load': File or directory not found: spec/models/**/*_spec.rb
>>>>> (RuntimeError)
>>>>>
>>>>> Yet, if I go into irb and do
>>>>>
>>>>> Dir.glob('spec/models/**/*_spec.rb')
>>>>>
>>>>> I get
>>>>>
>>>>> ["spec/models/county_spec.rb", "spec/models/county_user_spec.rb",
>>>>> "spec/models/message_county_spec.rb", "spec/models/message_spec.rb",
>>>>> "spec/models/message_user_spec.rb", "spec/models/postman_spec.rb",
>>>>> "spec/models/user_spec.rb"]
>>>>>
>>>>> Does spec not glob? I'm working on a wrapper script and I'd like to be
>>>>> able
>>>>> to run all specs of a given type (controller, model, view) by passing a
>>>>> single switch (-c, -m, -v). It works when I have subdirectories (as I do
>>>>> with controllers), but it isn't working when I don't (as with models).
>>>>> The
>>>>> fact that glob picks up the files properly got me wondering, so I
>>>>> thought
>>>>> I'd ask.
>>>>>
>>>>>
>>>> When running script/spec from the CLI the globbing rules will depend
>>>> on the shell. Try searching Google for "bash globbing" (or whatever
>>>> shell you're using). But if all you need is to run all the model
>>>> specs, you could use "rake spec:models". That works well for me.
>>>>
>>> Or just "script/spec spec/models"
>>>
>>>
>> Thanks for the replies. It's not as simple as I just want to spec all
>> models. As I mentioned, I'm writing a wrapper script to automate some things
>> that I repeatedly find myself doing or wanting to do. I am trying to do a
>> very simple **/* pattern when I don't pass a pattern as an argument. I don't
>> really want to have a conditional that says
>>
>> rake spec:models unless pattern
>>
>> when the rest of my code actually calls script/spec. David's suggestion
>> might work though. Right now, I do
>>
>> file = ARGV.at(0) if ARGV.size>  0
>> file = '**/*' unless file
>> <some logic to determine what type of spec to run, which defines
>> filename_partial>
>> spec_path = "#{spec_path}/#{file}#{filename_partial}.rb"
>>
>> file can be "user", "admin/message", "admin/*", "*/message", or whatever I
>> need it to be. That's why I'm looking for the easiest way to run all of a
>> given type. Eventually I'm going to add support for ~, like with Cucumber
>> tags, except for specs. I did this in a wrapper for Cucumber features and it
>> is working out well for me.
>>
>> I'll keep kicking it around. I'm confident a reasonable solution is not far
>> off.
>>
>> Peace,
>> Phillip
>>

> Phillip, any updates on your efforts?
>
> I am keenly interested in a Cucumber tags like facility for RSpec
>

My original message was misleading. I didn't mean to imply that I was working on adding support for tags to RSpec. Rather, when you invoke cucumber on the command line, you
can exclude tags by prepending a tilde (~). When I originally posted that question, I was working on the ability to pass in patterns to include or exclude. As a simple example,
suppose I wanted to run all admin controller specs except those having to do with messaging, I would use

<command name>  -c admin/* ~message

But this hasn't shown itself to be very important after all. In fact, I actually forgot that I had wanted to do it.

Peace,
Phillip




More information about the rspec-users mailing list