On Thu, Nov 27, 2008 at 9:06 AM, <[EMAIL PROTECTED]> wrote:
> This is probably basic but I'm not seeing it. I'm using rspec & rspec-rails
> 1.1.11 on Ubuntu, & rails 2.1.0. Here's (the relevant parts of) my class I'm
> testing:
>
> class Adtag < ActiveRecord::Base
>
> # snip
>
> validates_inclusion_of :size, :in => IAB_SIZES
> validates_presence_of :code
> validates_presence_of :client_id
> validates_presence_of :campaign_id
>
> # snip
>
> end
>
>
>
> And here's the spec:
>
> module AdtagSpecHelper
> def valid_adtag_attributes
> {
> :category => "shopping",
> :code => "<some adtag='/code'>goes</here>",
> :client_id => 1,
> :campaign_id => 1,
> :size => "300x250"
> }
> end
> end
>
> describe Adtag do
> include AdtagSpecHelper
>
> before(:each) do
> @adtag = Adtag.create( valid_adtag_attributes )
> @adtag.should be_valid
> end
>
> it "should be invalid without an approved size" do
> @adtag.attributes = valid_adtag_attributes.except(:size) # ONE
attributes= does NOT set any attributes that are not included in the
hash. In this case it does not try to assign the value of :size.
As for not showing in the test log, I believe (but I'm not sure) that
AR will not run an SQL update unless attributes= changes the value of
any of the attributes it assigns. In this case, that is not happening,
so no query.
Cheers,
David
> @adtag.errors.on(:size).should eql("is not included in the list") # TWO
> @adtag.should have(1).error_on(:size) # THREE
> @adtag.should_not be_valid
> @adtag.size = "300x250"
> @adtag.should be_valid
> end
> end
>
> When I run this, the line with # ONE isn't getting executed. the attributes=
> method doesn't change the attributes of the @adtag object and I don't know
> why - there is no update SQL command in the test log. I can get around this
> by changing that line to this:
>
> @adtag.update_attribute( :size, nil )
>
> ...which works but then at the line with # THREE, another error appears:
>
> 1)
> 'Adtag should be invalid without an approved size' FAILED
> expected "is not included in the list", got nil (using .eql?)
>
> ...and that is weird because the "validates_inclusion_of :size, :in =>
> IAB_SIZES" in the model should complain, not give nil.
>
>
>
> All of this adds up to some general strangeness that seems pretty
> un-rspec-like. Any ideas or help is most welcome.
>
>
>
> -Jason
>
>
>
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users