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?
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
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Oh of course!! I can''t believe I forgot that. Thanks so much!!! On Thu, Aug 19, 2010 at 12:15 PM, Philip Hallstrom <philip-LSG90OXdqQE@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > . > > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > . > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.