Hi, It states on page 140 of Agile Web Development with Rails: Here?s the bottom line: even if a test method updates the test database, the database is put back to its default state before the next test method is run. This is important because we don?t want tests to become dependent on the results of previous tests. Well, I''ve been running into a brick wall with some functional tests based off of what the scaffold generator created for me. Here''s a couple snippets: articles.yml: first: id: 1 published: 1 publish_on: 2006-01-24 14:50:30 articles_controller_test.rb: <snip> def test_edit get :edit, :id => 1, :version_id => 1 assert_response :success assert_template ''edit'' assert_not_nil assigns(:article) assert assigns(:article).valid? end def test_destroy assert_not_nil Article.find(1) post :destroy, :id => 1 assert_response :redirect assert_redirected_to :action => ''list'' assert_raise(ActiveRecord::RecordNotFound) { Article.find(1) } end And finally, the error that''s being thrown when this is run: 1) Error: test_edit(Controllers::Admin::ArticlesControllerTest): ActiveRecord::RecordNotFound: Couldn''t find Article with ID=1 So, it looks like test_destroy is being run first... any idea why my fixtures aren''t being reloaded before each test is being run? Is there something else I should be doing? Thanks in advance, Mike
Mike Evans wrote:> So, it looks like test_destroy is being run first...Yup... They''re run in alphabetical order.> any idea why my > fixtures aren''t being reloaded before each test is being run? Is there > something else I should be doing?Silly question, but let''s get it out of the way: Do you have a fixtures :articles line in your testcase? If it''s come direct from the scaffold, it should be there, but just in case... If they weren''t loaded at all, that would have the same effect. Oh, and what''s your database and version? -- Alex
Alex Young wrote:> Silly question, but let''s get it out of the way: Do you have a > fixtures :articles > line in your testcase? If it''s come direct from the scaffold, it > should be there, but just in case... >Yep, fixtures :articles, :article_versions to be exact. Odd enough, when I run the test_edit directly: $ ruby articles_controller_test.rb -n test_edit it runs fine.> If they weren''t loaded at all, that would have the same effect. > > Oh, and what''s your database and version? >MySQL 4.1.16 and I''m using the mysql gem. Another problem to note is when writing my tests my fixtures aren''t available directly in my test cases: first: id: 1 published: 1 publish_on: 2006-01-24 14:50:30 And if I try to use @first in the test, it comes back as nil. Could the problems be related? Thanks, Mike
Mike, I recommend http://www.clarkware.com/cgi/blosxom/2005/10/24 The cause of your problem is probably that you''re using transactional fixtures and your MySQL tables are MyISAM not InnoDB. For a quick/dirty fix set use_transactional_fixtures = false in your test_helper.rb> And if I try to use @first in the test, it comes back as nil. Could the > problems be related?If you want to be able to use @first you must have self.use_instantiated_fixtures = true in your test_helper.rb. Otherwise, use articles(:first) instead. cheers Gerret
Reasonably Related Threads
- testing - how to get access to an instance variable
- [PATCH server] fixed functional tests after recent controller refactoring and managed node controller fixes.
- functional testing joins table problem
- Testing model: test becomes dependent on previous test
- DB not being repopulated prior to Unit test execution