Oh of course!! I can't believe I forgot that.

Thanks so much!!!

On Thu, Aug 19, 2010 at 12:15 PM, Philip Hallstrom <[email protected]> wrote:

>
> On Aug 19, 2010, at 12:02 PM, Madison Kelly wrote:
>
> > Hello --
> >
> > Thanks in advance for putting up with a newbie question:)
> >
> > I added two columns to my Products model. The db migration completed
> without error, I added the items to the views, and I tested the expected
> behavior on the site itself. The properties can be set, stored, and is
> displayed later. I also put some validation in the model, and the errors
> display perfectly. So everything is working just as I would expect.
> >
> > Where I ran into trouble is when I ran the unit tests I have for the
> products model. I'm getting errors that say the properties are an "undefined
> method". Even for test cases that don't refer to these properties, they are
> returning the same error. I assume this is from referencing the model. Why
> does everything work correctly on the site, but the test cases don't seem to
> recognize the new properties I've added to the model?
>
> Don't you need to setup the test database?
>
> rake db:test:clone            # Recreate the test database from the current
> environment's database schema
> rake db:test:clone_structure  # Recreate the test databases from the
> development structure
> rake db:test:load             # Recreate the test database from the current
> schema.rb
> rake db:test:prepare          # Check for pending migrations and load the
> test schema
> rake db:test:purge            # Empty the test database
>
> >
> > Thanks!
> > Madison
> >
> >
> > Additional information below:
> >
> > (note: two new columns are has_case and case_quantity)
> >
> > Error:
> > C:\webapp\depot>ruby -I test test/unit/product_test.rb
> > Loaded suite test/unit/product_test
> > Started
> > EEEEEE
> > Finished in 0.218401 seconds.
> >   1) Error:
> > test_default_case_values(ProductTest):
> > NoMethodError: undefined method `has_case' for #<Product:0x8c65b60>
> >     test/unit/product_test.rb:53:in `test_default_case_values'
> >   2) Error:
> > test_if_has_case_must_have_case_quantity(ProductTest):
> > ActiveRecord::UnknownAttributeError: unknown attribute: has_case
> >     test/unit/product_test.rb:58:in `new'
> >     test/unit/product_test.rb:58:in
> `test_if_has_case_must_have_case_quantity'
> >   3) Error:
> > test_image_url(ProductTest):
> > NoMethodError: undefined method `case_quantity' for #<Product:0x8c606d0>
> >     test/unit/product_test.rb:36:in `test_image_url'
> >     test/unit/product_test.rb:34:in `each'
> >     test/unit/product_test.rb:34:in `test_image_url'
> >   4) Error:
> > test_invalid_with_empty_attributes(ProductTest):
> > NoMethodError: undefined method `case_quantity' for #<Product:0x8c5db20>
> >     test/unit/product_test.rb:10:in `test_invalid_with_empty_attributes'
> >   5) Error:
> > test_positive_price(ProductTest):
> > NoMethodError: undefined method `case_quantity' for #<Product:0x8c5af10>
> >     test/unit/product_test.rb:20:in `test_positive_price'
> >   6) Error:
> > test_unique_title(ProductTest):
> > NoMethodError: undefined method `case_quantity' for #<Product:0x8c57988>
> >     test/unit/product_test.rb:47:in `test_unique_title'
> > 6 tests, 0 assertions, 0 failures, 6 errors
> > C:\webapp\depot>
> >
> >
> > Model:
> > class Product < ActiveRecord::Base
> >   has_many :orders, :through=> :line_items
> >   has_many :line_items
> >   validates_presence_of :title, :description, :image_url, :price
> >   validates_numericality_of :price, :case_quantity
> >   validate :price_must_be_at_least_a_cent, :if_case_must_have_quantity,
> >             :if_quantity_must_have_case
> >   validates_uniqueness_of :title
> >   validates_format_of :image_url,
> >                       :with => %r{\.(gif|jpg|png)$}i,
> >                       :message => 'must be a URL for GIF, JPG ' + 'or PNG
> image.'
> >   protected
> >   def price_must_be_at_least_a_cent
> >     errors.add(:price, 'should be at least 0.01') if price.nil? || price
> < 0.01
> >   end
> >   def if_case_must_have_quantity
> >     if (has_case == true) && (case_quantity < 1)
> >       errors.add(:case_quantity, ': must set case quantity if this
> product can be sold in cases')
> >     end
> >   end
> >   def if_quantity_must_have_case
> >     if (has_case == false) && (case_quantity > 0)
> >       errors.add(:case_quantity, ': must be 0 if product is not sold in
> cases')
> >     end
> >   end
> >   def self.find_products_for_sale
> >     find(:all, :order => "title")
> >   end
> > end
> >
> >
> > DB migration:
> > class AddCaseAndQuantityToProducts < ActiveRecord::Migration
> >   def self.up
> >     add_column :products, :has_case, :boolean, :default => false
> >     add_column :products, :case_quantity, :integer, :default => 0
> >   end
> >   def self.down
> >     remove_column :products, :has_case
> >     remove_column :products, :case_quantity
> >   end
> > end
> >
> >
>  > --
> > You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> > For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to