Skip to content

DatabaseCleaner clean between each HTTP requests with capybara #235

@sebfie

Description

@sebfie

Hello,

I have an issue using database_cleaner with capybara-webkit. I configured it like this :

class ActionDispatch::IntegrationTest
  # Make the Capybara DSL available in all integration tests
  include Capybara::DSL

  # Stop ActiveRecord from wrapping tests in transactions
  self.use_transactional_fixtures = false

  DatabaseCleaner.strategy = :truncation
  Capybara.javascript_driver = :webkit

  setup do
    WebMock.disable_net_connect!(:allow_localhost => true)
    ENV['TEST_TYPE'] = 'integration'
  end

  teardown do
    DatabaseCleaner.clean       # Truncate the database
    Capybara.reset_sessions!    # Forget the (simulated) browser state
    Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
  end
end

And when I do this test :

test "click on detail of an application redirect to the show view" do
  as_user(@user).visit applications_path

  page.find('table .fui-search').click # This will redirect to an other url
  assert_equal current_path, application_path(@application)
end

I have this error :

ApplicationsTest
    ERROR (0:00:02.231) click on detail of an application redirect to the show view
          Couldn't find Application with id=1

When I read log, I saw this trace :

   Marqueur - 14 août 2013 08:52:07
  Connecting to database specified by database.yml
    �[1m�[36m (0.2ms)�[0m  �[1mBEGIN�[0m
    �[1m�[35mUser Exists (0.4ms)�[0m  SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'john1@email.com' LIMIT 1
    �[1m�[36mSQL (0.9ms)�[0m  �[1mINSERT INTO `users` (`confirmation_sent_at`, `confirmation_token`, `confirmed_at`, `created_at`, `current_sign_in_at`, `current_sign_in_ip`, `email`, `encrypted_password`, `invitation_accepted_at`, `invitation_limit`, `invitation_sent_at`, `invitation_token`, `invited_by_id`, `invited_by_type`, `last_sign_in_at`, `last_sign_in_ip`, `remember_created_at`, `reset_password_sent_at`, `reset_password_token`, `role`, `sign_in_count`, `unconfirmed_email`, `updated_at`) VALUES (NULL, NULL, '2013-08-14 06:55:38', '2013-08-14 06:55:38', NULL, NULL, 'john1@email.com', '$2a$04$J/1vTpmaCQcxs1Dz0i0Cx.Bm..6/joVCzrwTFsmApSXwK9qXdxLsm', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'user', 0, NULL, '2013-08-14 06:55:38')�[0m
    �[1m�[35m (0.6ms)�[0m  COMMIT
    �[1m�[36m (0.1ms)�[0m  �[1mBEGIN�[0m
    �[1m�[35mSQL (0.6ms)�[0m  INSERT INTO `applications` (`created_at`, `name`, `owner_id`, `updated_at`) VALUES ('2013-08-14 06:55:38', 'application-1', 1, '2013-08-14 06:55:38')
    �[1m�[36m (0.3ms)�[0m  �[1mCOMMIT�[0m
  Started GET "/applications" for 127.0.0.1 at 2013-08-14 08:55:39 +0200
    �[1m�[35m (0.2ms)�[0m  BEGIN
    �[1m�[36m (2.2ms)�[0m  �[1mUPDATE `users` SET `last_sign_in_at` = '2013-08-14 06:55:39', `current_sign_in_at` = '2013-08-14 06:55:39', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2013-08-14 06:55:39' WHERE `users`.`id` = 1�[0m
    �[1m�[35m (0.7ms)�[0m  COMMIT
  Processing by ApplicationsController#index as HTML
    �[1m�[36mUserApplication Load (0.2ms)�[0m  �[1mSELECT `user_applications`.* FROM `user_applications` WHERE `user_applications`.`user_id` = 1�[0m
    �[1m�[35mApplication Load (0.2ms)�[0m  SELECT `applications`.* FROM `applications` WHERE `applications`.`owner_id` = 1
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` INNER JOIN `admin_user_applications` ON `applications`.`id` = `admin_user_applications`.`application_id` WHERE `admin_user_applications`.`user_id` = 1�[0m
    �[1m�[35mApplication Load (0.5ms)�[0m  SELECT `applications`.* FROM `applications` INNER JOIN `user_applications` ON `applications`.`id` = `user_applications`.`application_id` WHERE `user_applications`.`user_id` = 1
    Rendered applications/index.html.haml within layouts/application (50.6ms)
    Rendered devise/menu/_registration_items.html.haml (2.1ms)
    Rendered devise/menu/_login_items.html.haml (2.1ms)
    Rendered layouts/_menu.html.haml (18.6ms)
    Rendered layouts/_breadcrumbs.html.haml (2.2ms)
  Completed 200 OK in 158ms (Views: 100.8ms | ActiveRecord: 6.3ms)
  Started GET "/assets/application.css" for 127.0.0.1 at 2013-08-14 08:55:39 +0200
  Served asset /application.css - 200 OK (45ms)
  Started GET "/assets/application.js" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Compiled i18n/translations.js  (37ms)  (pid 12445)
  Compiled vendor_assets.js  (36ms)  (pid 12445)
  Compiled application.js  (51ms)  (pid 12445)
  Served asset /application.js - 200 OK (352ms)
  Started GET "/applications.html?l=false" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Processing by ApplicationsController#index as HTML
    Parameters: {"l"=>"false"}
    �[1m�[36mUser Load (0.4ms)�[0m  �[1mSELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1�[0m
    �[1m�[35mUserApplication Load (0.3ms)�[0m  SELECT `user_applications`.* FROM `user_applications` WHERE `user_applications`.`user_id` = 1
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` WHERE `applications`.`owner_id` = 1�[0m
    �[1m�[35mApplication Load (0.2ms)�[0m  SELECT `applications`.* FROM `applications` INNER JOIN `admin_user_applications` ON `applications`.`id` = `admin_user_applications`.`application_id` WHERE `admin_user_applications`.`user_id` = 1
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` INNER JOIN `user_applications` ON `applications`.`id` = `user_applications`.`application_id` WHERE `user_applications`.`user_id` = 1�[0m
    Rendered applications/index.html.haml (1.4ms)
  Completed 200 OK in 16ms (Views: 2.0ms | ActiveRecord: 1.4ms)
  Started GET "/applications.json" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Processing by ApplicationsController#index as JSON
    �[1m�[35mUser Load (0.3ms)�[0m  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
    �[1m�[36mUserApplication Load (0.3ms)�[0m  �[1mSELECT `user_applications`.* FROM `user_applications` WHERE `user_applications`.`user_id` = 1�[0m
    �[1m�[35mApplication Load (0.2ms)�[0m  SELECT `applications`.* FROM `applications` WHERE `applications`.`owner_id` = 1
    �[1m�[36mApplication Load (0.2ms)�[0m  �[1mSELECT `applications`.* FROM `applications` INNER JOIN `admin_user_applications` ON `applications`.`id` = `admin_user_applications`.`application_id` WHERE `admin_user_applications`.`user_id` = 1�[0m
    �[1m�[35mApplication Load (0.3ms)�[0m  SELECT `applications`.* FROM `applications` INNER JOIN `user_applications` ON `applications`.`id` = `user_applications`.`application_id` WHERE `user_applications`.`user_id` = 1
    �[1m�[36mUser Load (0.4ms)�[0m  �[1mSELECT `users`.* FROM `users` INNER JOIN `user_applications` ON `users`.`id` = `user_applications`.`user_id` WHERE `user_applications`.`application_id` = 1�[0m
    �[1m�[35mUser Load (0.3ms)�[0m  SELECT `users`.* FROM `users` INNER JOIN `admin_user_applications` ON `users`.`id` = `admin_user_applications`.`user_id` WHERE `admin_user_applications`.`application_id` = 1
  Completed 200 OK in 21ms (Views: 5.7ms | ActiveRecord: 2.0ms)
  Started GET "/applications/1" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Processing by ApplicationsController#show as JSON
    Parameters: {"id"=>"1"}
    �[1m�[36mApplication Load (2.5ms)�[0m  �[1mSELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 1 LIMIT 1�[0m
    �[1m�[35mUser Load (0.4ms)�[0m  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
    �[1m�[36mUserApplication Load (1.1ms)�[0m  �[1mSELECT `user_applications`.* FROM `user_applications` WHERE `user_applications`.`user_id` = 1�[0m
    �[1m�[35m (1.1ms)�[0m  SELECT @@FOREIGN_KEY_CHECKS
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` WHERE `applications`.`owner_id` = 1�[0m
    �[1m�[35m (0.2ms)�[0m  SET FOREIGN_KEY_CHECKS = 0
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` INNER JOIN `admin_user_applications` ON `applications`.`id` = `admin_user_applications`.`application_id` WHERE `admin_user_applications`.`user_id` = 1�[0m
    �[1m�[35mCACHE (0.0ms)�[0m  SELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 1 LIMIT 1
    �[1m�[36mUser Load (0.3ms)�[0m  �[1mSELECT `users`.* FROM `users` INNER JOIN `user_applications` ON `users`.`id` = `user_applications`.`user_id` WHERE `user_applications`.`application_id` = 1�[0m
    �[1m�[35m (1.0ms)�[0m  SELECT DATABASE() as db
    �[1m�[36mUser Load (0.3ms)�[0m  �[1mSELECT `users`.* FROM `users` INNER JOIN `admin_user_applications` ON `users`.`id` = `admin_user_applications`.`user_id` WHERE `admin_user_applications`.`application_id` = 1�[0m
  Completed 200 OK in 20ms (Views: 2.2ms | ActiveRecord: 5.2ms)
    �[1m�[35m (1.5ms)�[0m  select table_name from information_schema.views where table_schema = 'perspective_test'
  Started GET "/applications/1.html?l=false" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Processing by ApplicationsController#show as HTML
    Parameters: {"l"=>"false", "id"=>"1"}
    �[1m�[36m (7.2ms)�[0m  �[1mTRUNCATE TABLE `admin_user_applications`;�[0m
    �[1m�[35mApplication Load (0.3ms)�[0m  SELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 1 LIMIT 1
    �[1m�[36m (2.0ms)�[0m  �[1mTRUNCATE TABLE `applications`;�[0m
    �[1m�[35mUser Load (0.4ms)�[0m  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
    �[1m�[36m (1.7ms)�[0m  �[1mTRUNCATE TABLE `user_applications`;�[0m
    �[1m�[35mUserApplication Load (0.7ms)�[0m  SELECT `user_applications`.* FROM `user_applications` WHERE `user_applications`.`user_id` = 1
    �[1m�[36mApplication Load (0.2ms)�[0m  �[1mSELECT `applications`.* FROM `applications` WHERE `applications`.`owner_id` = 1�[0m
    �[1m�[35mApplication Load (0.2ms)�[0m  SELECT `applications`.* FROM `applications` INNER JOIN `admin_user_applications` ON `applications`.`id` = `admin_user_applications`.`application_id` WHERE `admin_user_applications`.`user_id` = 1
  Redirected to http://127.0.0.1:50420/applications/1
  Completed 302 Found in 12ms (ActiveRecord: 1.8ms)
    �[1m�[36m (3.5ms)�[0m  �[1mTRUNCATE TABLE `users`;�[0m
    �[1m�[35m (0.2ms)�[0m  SET FOREIGN_KEY_CHECKS = 1
  Started GET "/applications/1" for 127.0.0.1 at 2013-08-14 08:55:40 +0200
  Processing by ApplicationsController#show as JSON
    Parameters: {"id"=>"1"}
    �[1m�[36mApplication Load (0.3ms)�[0m  �[1mSELECT `applications`.* FROM `applications` WHERE `applications`.`id` = 1 LIMIT 1�[0m
  Completed 404 Not Found in 6ms

As you can see, there are many truncate between each HTTP requests on the same test. What did I do wrong?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions