[rspec-users] Specifying certain tables NOT to be cleared each example?

David Chelimsky dchelimsky at gmail.com
Thu May 22 11:34:22 EDT 2008


On May 22, 2008, at 10:19 AM, Andrew Selder wrote:

> YEAH!!!!!!! I've got it.
>
> I changed my rspec.rake to:
>
> spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config',  
> 'database.yml')) ? ["db:test:purge", :testing, "db:migrate"] : :noop
> task :noop do
> end
>
> task :testing => :environment do
>  RAILS_ENV = ENV['RAILS_ENV'] = 'test'
>  ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
> end
>
> task :default => :spec
> task :stats => "spec:statsetup"
>
> desc "Run all specs in spec directory (excluding plugin specs)"
> Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
>  t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
>  t.spec_files = FileList['spec/**/*_spec.rb']
> end
>
> Thanks for all the assistance from everyone.

This is great stuff Andrew - do you have a blog? If so, please  
consider blogging this.

Cheers,
David

>
>
> Thanks,
>
> Andrew
>
> On May 22, 2008, at 10:25 AM, David Chelimsky wrote:
>
>> On Thu, May 22, 2008 at 9:12 AM, Andrew Selder <aselder at mac.com>  
>> wrote:
>>> Downloaded the latest plugins from Github and got the same results.
>>>
>>> The spec rake task still ends up calling db:test:prepare which  
>>> blows away
>>> the database and reloads only the schema.
>>
>> Well, thanks for trying.
>>
>> You can't be the first person to run up against this problem. I've  
>> run
>> into it before but not in any rails apps I've worked on.
>>
>> Sounds like the solution would be something like what Scott and  
>> Ashley
>> are talking about - introducing rake db:migrate or a custom data  
>> setup
>> task after or instead of db:test:prepare.
>>
>>>
>>> Thanks,
>>>
>>> Andrew
>>>
>>> On May 22, 2008, at 9:58 AM, David Chelimsky wrote:
>>>
>>>> On Thu, May 22, 2008 at 8:55 AM, Andrew Selder <aselder at mac.com>  
>>>> wrote:
>>>>>
>>>>> David,
>>>>>
>>>>> The static data generated in the migrations in being wiped away.
>>>>>
>>>>> I did a
>>>>> rake db:test:purge
>>>>>
>>>>> followed by
>>>>>
>>>>> rake db:migrate RAILS_ENV=test
>>>>>
>>>>> and then looked in my database to verify that the data was there  
>>>>> and it
>>>>> was.
>>>>>
>>>>> And then when I run rake spec, the test blow up and I looks at  
>>>>> the DB and
>>>>> all the static tables are empty.
>>>>>
>>>>> Looking at the rspec.rake file in the rspec_on_rails plugin, the  
>>>>> spec
>>>>> task
>>>>> calls the spec_prereq task. This task does a db:test:prepare,  
>>>>> which
>>>>> looking
>>>>> at the source for that in the rails gem only copies the schema  
>>>>> from the
>>>>> development db.
>>>>>
>>>>> I'm using Rails 2.1 RC1, and the tagged CURRENT version of both  
>>>>> plugins.
>>>>
>>>> AHA!
>>>>
>>>> CURRENT means the latest release, which is 1.1.3, which was  
>>>> released
>>>> months ago, before Rails 2.1 RC1.
>>>>
>>>> Try the latest from github:
>>>>
>>>> script/plugin install git://github.com/dchelimsky/rspec.git
>>>> script/plugin install git://github.com/dchelimsky/rspec-rails.git
>>>> script/generate rspec
>>>>
>>>> See if that makes any difference.
>>>>
>>>> Cheers,
>>>> David
>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Andrew
>>>>>
>>>>> On May 22, 2008, at 9:32 AM, David Chelimsky wrote:
>>>>>
>>>>>> On May 21, 2008, at 9:49 PM, Andrew Selder wrote:
>>>>>>
>>>>>>> Is it possible to specify that certain tables not be cleared  
>>>>>>> on each
>>>>>>> example.
>>>>>>>
>>>>>>> I've inherited a project where a good amount of enumerated  
>>>>>>> data is
>>>>>>> stored
>>>>>>> in the database (US States, statuses, about 15-20 tables  
>>>>>>> worth. Over
>>>>>>> all,
>>>>>>> it's a reasonable decision that leads to solid production code
>>>>>>> (acts_as_enumerated is good). This data is read-only and  
>>>>>>> relatively
>>>>>>> static;
>>>>>>> any changes to these tables are done via migrations.
>>>>>>>
>>>>>>> The problem comes when I'm writing my tests. Obviously all  
>>>>>>> these tables
>>>>>>> get wiped with each example.
>>>>>>
>>>>>> This should not be the case. Transactions get rolled back, but  
>>>>>> tables do
>>>>>> not just get wiped clean.
>>>>>>
>>>>>> If this static data is being generated in migrations, then you  
>>>>>> should be
>>>>>> OK. Is it?
>>>>>>
>>>>>>> Yes, I could specify these as fixtures, but I really don't  
>>>>>>> want to have
>>>>>>> to specify 15-20 fixtures on every example. Yes, I could mock/ 
>>>>>>> stub all
>>>>>>> the
>>>>>>> values, except that I use many of these values at class  
>>>>>>> definition
>>>>>>> time,
>>>>>>> which means that errors are thrown before I can even mock/stub.
>>>>>>>
>>>>>>> For instance, I have a statement like this.
>>>>>>>
>>>>>>> named_scope :open, :conditions => ["lead_status_id IN (?)",  
>>>>>>> %w{New
>>>>>>> Incubating Client UAG}.collect{|x| LeadStatus[x].id}]
>>>>>>>
>>>>>>> Which loads the named_scope using the string version of the  
>>>>>>> enumeration
>>>>>>> for clarity's sake. It works great, except for testing.
>>>>>>>
>>>>>>> Does anybody see anyway around this other than creating a  
>>>>>>> fixture file
>>>>>>> for each of these tables and loading all the fixtures on each  
>>>>>>> describe
>>>>>>> block. Not only does this make for ugly code, but I'm sure it  
>>>>>>> takes a
>>>>>>> good
>>>>>>> chunk of time to setup and teardown each of the tables each  
>>>>>>> example.
>>>>>>>
>>>>>>> It would be wonderful if there was some option to specify  
>>>>>>> tables that
>>>>>>> behave like this, that should be loaded at the beginning of  
>>>>>>> the test
>>>>>>> run,
>>>>>>> and (optionally) trashed at the end of the run. Or even  
>>>>>>> better, specify
>>>>>>> that
>>>>>>> the test script shouldn't touch (build or teardown) these  
>>>>>>> tables at
>>>>>>> all, and
>>>>>>> let their migrated state remain.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Andrew
>> _______________________________________________
>> 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



More information about the rspec-users mailing list