Итак, я настроил свою среду RSpec на использование стратегии очистки усечения для моих тестов RSpec Capybara, но я все еще обнаруживаю, что что-то все еще оборачивает мой тест в транзакцию, когда я использую Webkit в качестве драйвера Javascript.
У меня нет этой проблемы с Selenium, что поставило меня в тупик.
Вот соответствующая конфигурация RSpec с webkit:
Capybara.javascript_driver = :webkit
Capybara.register_driver :webkit do |app|
Capybara::Webkit::Driver.new(app).tap do |driver|
driver.allow_url "fonts.googleapis.com"
driver.allow_url "dl.dropboxusercontent.com"
end
end
config.before(:suite) do
DatabaseCleaner.clean_with :truncation
DatabaseCleaner.clean_with :transaction
end
config.after(:each) do
ActionMailer::Base.deliveries.clear
end
config.around(:each, type: :feature, js: true) do |ex|
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
self.use_transactional_fixtures = false
ex.run
self.use_transactional_fixtures = true
DatabaseCleaner.clean
end
И мой тест функций выглядит так:
feature "profile", js: true do
describe "a confirmed user with a valid profile" do
before(:each) do
@user = FactoryGirl.create :user
signin(@user.email, @user.password)
end
scenario 'can edit name' do
visit edit_user_profile_path
fill_in :user_name, with: 'New name'
click_button :Submit
@user.reload
expect(@user.name).to eq('New name')
expect(current_path).to eq show_user_path
end
end
end
Если я запускаю этот тест с помощью Webkit, он не проходит, но с Selenium он проходит.
Я экспериментировал с отладкой. Если я помещу оператор отладчика в действие #update, я увижу, что он корректно обновляет базу данных. Если в это время я подключаюсь к тестовой базе данных, я вижу новую информацию в базе данных, что означает, что это обновление не может быть заключено в транзакцию. Однако, но в отладчике в .spec @user по-прежнему видно исходное имя, сгенерированное Ffaker в factory_girl. Это наводит меня на мысль, что тест выполняется внутри транзакции.
Когда я меняю свой драйвер JavaScript на Selenium, все работает нормально.
Любые идеи?