Farrel Lifson
2008-Mar-02 22:47 UTC
Models are not initialised correctly with ''rake test'' in Merb 0.9.1
I''m using Sequel as my ORM and Test::Unit as my testing framework and have the following model: class Item < Sequel::Model validates do presence_of( :name, :uuid, :vendor_id, :vendor_reference, :amount, :currency_code ) uniqueness_of( :uuid ) end def initialize( *args ) super( *args ) self.uuid = UUID.random_create.to_s end end As you can see I overwrite initialize to set up the UUID when the model is instantiated. In my tests I have the following method which sets up an Item: def generate_valid_new_item item = Item.new do |i| i.name = random_item_name i.description = random_description i.vendor_id = random_vendor_id i.vendor_reference = random_vendor_reference i.amount = random_amount i.currency_code = random_currency_code i.image_url = random_homepage_url end assert( item.valid?, item.errors.full_messages ) item end The problem is that when it gets to that assert on the 3rd last line it fails because item.uuid (which should exist) is nil. I put a breakpoint in the initialize method and it is never called(!?). I have no clue how the object is being initialised if new is called but initialize is not? The strange thing is that this only happens when I run my unit tests. If I run ''merb -i'' (even with -e test) I can initialise an Item correctly: farrel at nicodemus ~/Projects/boxen $ merb -i -e test ~ loading gem ''merb_sequel'' from config/init.rb:30 ... ~ loading gem ''merb_test_unit'' from config/init.rb:41 ... ~ The merb_test_unit gem was not found. You may need to install it. ~ Loaded TEST Environment... ~ Connecting to the ''boxen_test'' database on ''localhost'' using ''postgres'' ... ~ Compiling routes... ~ loading gem ''password'' from config/init.rb:58 ... ~ loading gem ''validation_extensions'' from config/init.rb:59 ... ~ loading gem ''uuidtools'' from config/init.rb:60 ... ~ Using ''share-nothing'' cookie sessions (4kb limit per client) irb(main):001:0> item = Item.new => #<Item @values={:uuid=>"ef62fa2e-594a-4305-b1bf-8a9b7aec8790"}> The UUID is definitely present there. Anyone else have some ideas? Farrel