-
Notifications
You must be signed in to change notification settings - Fork 0
Browsers and Transactions
When your features are driving a browser using tools like Selenium or Watir you need to turn off database transactions.
This is because your browser is running against a server that is using a different database connection than cucumber. This is becaouse they run in separate processes. Since they have two different connections, if transactions are on, the server connection can’t see the data modified by the cucumber connection before the cucumber commits it to the database. With transactions on, nothing is ever committed to the database, and the server connection will never see it.
If you’re using Ruby on Rails it’s easy to turn of transactions for a feature or particular scenarios (if you’re on 0.3.103 or above), just use the @no-txn tag, e.g.
@no-txn Feature: Lots of scenarios with transactions off.
or
Feature: ... @no-txn Scenario: One scenario with transactions off.
Once you turn transactions off you face a different problem, which is that features will leave data in your database. If you’re using Ruby on Rails, a good tool to deal with this is Ben Mabey’s Database Cleaner gem which you can install with gem install bmabey-database_cleaner --source http://gems.github.com/<code>. You can use this very effectively with the <code>@no-txn tag. Something like the following somewhere in e.g. features/support/db_cleaner.rb should work well:
require 'database_cleaner'
DatabaseCleaner.clean_with :truncation # clean once to ensure clean slate
Before('@no-txn') do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
After('@no-txn') do
DatabaseCleaner.clean
DatabaseCleaner.strategy = :transaction
end
If you’re not using Rails, writing something similar should be fairly easy.