[Chirb] tools, already in play and coming soon

David Chelimsky dchelimsky at gmail.com
Wed Jun 11 11:08:38 EDT 2008


Hey Jake - thanks for sharing this. Couple o' comments below:

On Jun 11, 2008, at 9:26 AM, Jake Scruggs wrote:

> I've been using the NullDb (http://agilewebdevelopment.com/plugins/nulldb 
> ) plugin to disconnect RSpec from the database.

The only drawback I've heard about NullDb is that it fails silently in  
certain cases - has led to some painful debugging. Have you had that  
experience?

> I don't like the global disconnect (for all specs everywhere) that  
> the web page suggests, so I set up this in my spec_helper:
>
> describe "Unit Spec", :shared => true do
>   before :all do
>     ActiveRecord::Base.establish_connection(:adapter => :nulldb)
>   end
>
>   after :all do
>     ActiveRecord::Base.establish_connection(:test)
>   end
> end
>
> and then say this inside any describe block I want to disconnect  
> from the db:
>
> require File.dirname(__FILE__) + "/../spec_helper"
>
> describe User do
>   it_should_behave_like "Unit Spec"

This is cool that it works, but using it_should_behave_like feels odd  
to me in this case. The User should not behave like a Unit Spec, the  
examples should be disconnected.

You can do this instead if you like:

share_as :Disconnected do
   before :all do
     ActiveRecord::Base.establish_connection(:adapter => :nulldb)
   end

   after :all do
     ActiveRecord::Base.establish_connection(:test)
   end
end

describe User do
   include Disconnected
...

Right now we don't have an arbitrary tagging mechanism but it's  
something we've talked about. This gives me an idea that I'd like to  
implement, and everything is pretty much in place to support this,  
where the options hash is available to you in the before and after  
blocks, so you could do this (CAREFUL - THIS DOES NOT WORK TODAY):

Spec::Runner.configure do |config|
   config.before(:all)
     if example_group_options[:disconnected]
       ActiveRecord::Base.establish_connection(:adapter => :nulldb)
     end
   end
   config.after(:all)
     if example_group_options[:disconnected]
       ActiveRecord::Base.establish_connection(:test)
     end
   end
end

Then you'd be able to say:

describe User, :disconnected => true do
   ...

WDYT about that?

Cheers,
David



>
> .
> .
> .
>
> using nested describes to separate my unit (don't hit the db) from  
> my functional (do hit the db) specs
>
> -Jake
>
> On Wed, Jun 11, 2008 at 8:37 AM, Ryan Platte <ryan at platte.name> wrote:
> Here are some Rake tasks I created to use RSpec with UnitRecord. I  
> set the default task to first run spec:fast, then spec:slow, so if  
> the fast ones fail we don't have to wait on the slow ones to set up  
> and run.
>
> The fly in the ointment is that schema.rb has to be current.
>
> namespace :spec do
>
>   desc "Run all fast specs in spec directory (excluding plugin specs)"
>   Spec::Rake::SpecTask.new(:fast) do |t|
>     t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
>     t.spec_files = FileList['spec/**/*_fast_spec.rb']
>     #t.ruby_opts = ['-r spec/spec_helper', '-rubygems', '- 
> runit_record', "-e 'ActiveRecord::Base.disconnect!'"]
>   end
>
>   desc "Run all non-fast specs in spec directory (excluding plugin  
> specs)"
>   Spec::Rake::SpecTask.new(:slow => spec_prereq) do |t|
>     t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
>     t.spec_files = FileList['spec/**/*_spec.rb'].exclude('spec/**/ 
> *_fast_spec.rb')
>   end
>
> end
>
>
> On Wed, Jun 11, 2008 at 1:36 AM, David Chelimsky  
> <dchelimsky at gmail.com> wrote:
> On Jun 9, 2008, at 11:31 PM, David Chelimsky wrote:
>
> Hey Chirb,
>
>
> Lastly, I may have mis-spoke about rails loading up columns from  
> schema.rb - I'm looking into it and will follow up when I learn the  
> truth. So Ryan - keep using unit-record for now :)
>
> I definitely mis-spoke. I don't know where I got that in my head,  
> but it seems I did.
>
> I don't recall who said it, but unit_record does the column caching  
> I thought rails did. So now it's off to figure out how to get rspec  
> to play nice w/ unit_record.
>
> More soon.
>
>
> Cheers,
> David
> _______________________________________________
> ChicagoGroup-Members-List at rubyforge.org
> http://rubyforge.org/mailman/listinfo/chicagogroup-members-list
>
>
>
> -- 
> Ryan Platte
> _______________________________________________
> ChicagoGroup-Members-List at rubyforge.org
> http://rubyforge.org/mailman/listinfo/chicagogroup-members-list
>
> _______________________________________________
> ChicagoGroup-Members-List at rubyforge.org
> http://rubyforge.org/mailman/listinfo/chicagogroup-members-list

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/chicagogroup-members-list/attachments/20080611/e34d434c/attachment.html>


More information about the ChicagoGroup-Members-List mailing list