On 7/24/07, Daniel N <[EMAIL PROTECTED]> wrote:



On 7/24/07, Ashley Moran <[EMAIL PROTECTED]> wrote:
>
>
> On 24 Jul 2007, at 14:07, Daniel N wrote:
>
> > Any hints as to how to do this without using fixtures?
>
> I did this literally minutes ago.  I don't use fixtures at all,
> ever.  Instead I put the data in the before block, eg:
>
> describe Purchase, "assigned to a Quote that already has a saved
> purchase" do
>    before(:each) do
>      @dealer = Dealer.create!(:name =>
> "Dealer1", :external_identifier => "D123")
>      @site = Site.create!(:hostname => "my.host.name", :dealer =>
> @dealer)
>
>      @provider = Provider.create!(:name => "Provider1")
>      @product = Product.create!(:name => "Product1", :provider =>
> @provider)
>      @applicant = Applicant.create!(:first_name => "Fred", :last_name
> => "Flinstone", :email => " [EMAIL PROTECTED]", :telephone_home =>
> "01782 123456")
>      @quote_parameters = QuoteParameters.create!(:term =>
> 36, :applicant => @applicant, :product => @product, :site => @site)
>      @quote = InsuranceQuote.create!(:valid_until =>
> 1.days.from_now, :quote_parameters => @quote_parameters, :premium =>
> 250)
>      Purchase.create!(:quote => @quote, :amount_financed => 200)
>    end
>
>    it "should be invalid" do
>      purchase = Purchase.new(:quote =>
> @quote, :amount_collected_by_card => "value")
>      purchase.should_not be_valid
>      purchase.errors.on (:quote_id).should_not be_nil
>    end
> end
>
> Comments welcome on whether this is a good way to do this.  (I know
> that the above doesn't test my database unique constraint, which I
> don't do in this case come to think of it, but I try to keep DB specs
> separate, hard as that may be sometimes.)
>
> Ashley


That looks like the kind of thing I was initially thinking of, but I
started to think that having all those objects being created in a
non-related spec could lead to trouble.  If I change what makes any of those
objects valid, these supposedly unrelated specs will then break.

I want to try and keep everything seperate, but in this case it seems that
things are interdependent.

Cheers
Daniel


What I've ended up doing is the following test

 it "should have a uniq clip_id for a given book" do
   lambda do
     Clipping.create( valid_clipping_attributes )
     Clipping.create( valid_clipping_attributes )
   end.should change( Clipping, :count ).by( 1 )
 end

It hits the database, but the valid_clipping_attributes are mocks that are
used throughout the spec so it's divorced from the other specs.

If there are any better ideas I'm open to them.

Thanx for the response Ashley.

Daniel
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to