malamute jute
2006-May-05 19:26 UTC
[Rails] Testing model: test becomes dependent on previous test
Im having trouble with Testing models. im following the tutorials in the book Agile Web Development with Rails. if i execute the code product_test.rb, i get this error: =========================================================== 1) Failure: test_update2(ProductTest) [test/unit/product_test.rb:30]: <29.95> expected but was <99.95>. 3 tests, 11 assertions, 1 failures, 0 errors =========================================================== and heres the product_test.rb code: ===========================================================require File.dirname(__FILE__) + ''/../test_helper'' class ProductTest < Test::Unit::TestCase fixtures :products def setup @product = Product.find(1) end # Replace this with your real tests. def test_create assert_kind_of Product, @product assert_equal 1, @product.id assert_equal "Pragmatic Programmer", @product.title assert_equal "Best book for the programmer", @product.description assert_equal "http://localhost:3000/images/pp.jpg", @product.image_url assert_equal 29.95, @product.price assert_equal "2006-05-01 00:00:00", @product.date_available_before_type_cast end def test_update assert_equal 29.95, @product.price @product.price = 99.95 assert @product.save, @product.errors.full_messages.join("; ") @product.reload assert_equal 99.95, @product.price end def test_update2 assert_equal 29.95, @product.price @product.price = 59.95 assert @product.save, @product.errors.full_messages.join("; ") @product.reload assert_equal 59.95, @product.price end end =========================================================== it reports an error (<29.95> expected but was <99.95>)) in test_update2. it seems test_update2 becomes dependent on the previous test, which it should not. if i add new test methods (such as test_destroy, test_validate,...), they also become dependent on previous tests. but the book says "...the database is put back to its default state before the next test method is run." so how do i correct this? -- Posted via http://www.ruby-forum.com/.
malamute jute
2006-May-05 19:29 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
btw, im using ubuntu dapper beta. i installed rails 1.0 and ruby 1.8.4 using synaptic manager. -- Posted via http://www.ruby-forum.com/.
Derrick Spell
2006-May-05 19:35 UTC
[Rails] Testing model: test becomes dependent on previous test
> ===========================================================> > it reports an error (<29.95> expected but was <99.95>)) in > test_update2. > it seems test_update2 becomes dependent on the previous test, which it > should not. if i add new test methods (such as test_destroy, > test_validate,...), they also become dependent on previous tests. but > the book says "...the database is put back to its default state before > the next test method is run." > > so how do i correct this? >If tests become dependent on each other, it means the our database transactions are not working correctly. Does your database support transactions? Are transactional fixtures enabled? Can''t remember off the top of my head where to check for this...probably environment/ test.rb Look in your test log. Are your tests wrapped with "START TRANSACTION" and "COMMIT" calls? -Derrick Spell
malamute jute
2006-May-05 19:52 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
Derrick Spell wrote:> > If tests become dependent on each other, it means the our database > transactions are not working correctly. Does your database support > transactions? Are transactional fixtures enabled? Can''t remember > off the top of my head where to check for this...probably environment/ > test.rb > > Look in your test log. Are your tests wrapped with "START > TRANSACTION" and "COMMIT" calls? > > -Derrick Spellhow do i know if my db supports transactions? im using mysql. the test_helper.rb, by default, has this: self.use_transactional_fixtures = true self.use_instantiated_fixtures = false i tried setting self.use_instantiated_fixtures to true, still the same error. please bear with me cause im still learning and following the tutorials on the book, code word by word. thanks. -- Posted via http://www.ruby-forum.com/.
Alex Wayne
2006-May-05 21:08 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
malamute jute wrote:> Derrick Spell wrote: > >> >> If tests become dependent on each other, it means the our database >> transactions are not working correctly. Does your database support >> transactions? Are transactional fixtures enabled? Can''t remember >> off the top of my head where to check for this...probably environment/ >> test.rb >> >> Look in your test log. Are your tests wrapped with "START >> TRANSACTION" and "COMMIT" calls? >> >> -Derrick Spell > > how do i know if my db supports transactions? im using mysql. > > the test_helper.rb, by default, has this: > > self.use_transactional_fixtures = true > self.use_instantiated_fixtures = false > > > i tried setting self.use_instantiated_fixtures to true, still the same > error. > > please bear with me cause im still learning and following the tutorials > on the book, code word by word. thanks.Try setting self.use_transactional_fixtures = false That will prevent the tests from using transactions meaning that the fixtures will be purged and reloaded the old fashioned way after each test method. It''s slower but it works. If it works after you do this, then your database does not support transactions. I recommend using the latest version of MySQL and be sure the table type you are using supports transactions. -- Posted via http://www.ruby-forum.com/.
malamute jute
2006-May-06 23:08 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
Alex Wayne wrote:> > Try setting self.use_transactional_fixtures = false > > That will prevent the tests from using transactions meaning that the > fixtures will be purged and reloaded the old fashioned way after each > test method. It''s slower but it works. > > If it works after you do this, then your database does not support > transactions. I recommend using the latest version of MySQL and be sure > the table type you are using supports transactions.It worked! my test_helper.rb now''s this: self.use_transactional_fixtures = false self.use_instantiated_fixtures = false my other test methods such as test_destroy and test_validate work successfully. That means my database doesnt support transactions? But im using mysql 5.0.19-3 already (installed using synaptic in ubuntu). Or probably my table type is the problem? Will check. Anyways, im glad it is working now. Many thanks. -- Posted via http://www.ruby-forum.com/.
Ray Baxter
2006-May-06 23:40 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
malamute jute wrote:> That means my database doesnt support transactions? But im > using mysql 5.0.19-3 already (installed using synaptic in ubuntu). Or > probably my table type is the problem? Will check.Yes, you have MyASM tables which don''t support transactions. If you want transactional support, you need to swithch to InnoDB style tables. -- Ray
malamute jute
2006-May-06 23:46 UTC
[Rails] Re: Testing model: test becomes dependent on previous test
alex/ray, you guys were right. im using phpmyadmin and it defaults to myisam type. i recreated my database/tables to use InnoDB and switched back self.use_transactional_fixtures to TRUE, and now its working properly. Many thanks for all your help. -- Posted via http://www.ruby-forum.com/.