Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DatabaseCleaner clean between each HTTP requests with capybara #235

Closed
sebfie opened this issue Aug 14, 2013 · 2 comments
Closed

DatabaseCleaner clean between each HTTP requests with capybara #235

sebfie opened this issue Aug 14, 2013 · 2 comments
Assignees

Comments

@sebfie
Copy link

sebfie commented Aug 14, 2013

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?

@irohiroki
Copy link

This can happen if assert_equal passes before the request of the click complete. It seems that you are already in /applications/1 before the redirection.

Started GET "/applications/1" for 127.0.0.1 at 2013-08-14 08:55:40 +0200

Started GET "/applications/1.html?l=false" for 127.0.0.1 at 2013-08-14 08:55:40 +0200

Redirected to http://127.0.0.1:50420/applications/1

Started GET "/applications/1" for 127.0.0.1 at 2013-08-14 08:55:40 +0200

@etagwerker etagwerker self-assigned this Mar 11, 2016
@etagwerker
Copy link
Member

@sebfie I'm pretty sure that this is no longer a problem if you use this configuration: https://github.com/DatabaseCleaner/database_cleaner/#rspec-with-capybara-example

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants