2013-03-09 2 views
6

Вот интеграционный тестовый пример с капибарой в рельсах 3.2.12. click_link 'New Log' - вызов ajax. Однако открытая страница начинается с $() и имеет кучу js escape, например \ n и \ log-log.Ошибка интеграции с capybara для вызова ajax с рельсами 3.2.12

it "should work with link on show customer_comm_record page" do 
     visit customer_customer_comm_records_path(@cust) 
     #visit customer_customer_comm_record_path(@cust, @crecord) 
     click_link @crecord.id.to_s  
     click_link 'New Log' 
     save_and_open_page 
end 

Мы также попытались обернуть дело с describe "", :js => true do, как есть ошибка говоря

`An error occurred in an after hook ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked:` 

Там нет ошибки из кода. Что случилось с случаем rspec? Спасибо за помощь.

+0

У вас есть консоль Rails, когда вы видите это? –

+0

Я не пробовал консоль рельсов. Есть ли что-то новое из консоли rails для ошибки? – user938363

+1

См. Http://stackoverflow.com/questions/6165889/database-is-locked –

ответ

8

Похоже, что ваш сервер блокирует базу данных, чтобы тест не смог очистить после его запуска.

Когда вы используете Capybara без JavaScript, тесты и сервер работают в одном процессе и потоке. Это означает, что они могут использовать одно и то же соединение с базой данных и транзакцию. Это означает, что RSpec может использовать простую транзакцию базы данных для отката изменений в конце теста и почему вы не видите конфликта между тестированием и сервером.

Когда вы запускаете :js => true, все немного отличается, сервер запускается в отдельном потоке или процессе для ваших тестов, поэтому каждый из них будет использовать отдельное соединение с базой данных и транзакцию. Это означает, что стратегия транзакций базы данных, которую RSpec использует по умолчанию для очистки, не будет работать. Это также вызывает ошибки блокировки в вашем случае.

Обсуждение этой проблемы в Capybara readme и рекомендует в качестве альтернативы альтернативу в качестве альтернативы в этой ситуации database_cleaner. Вам нужно будет настроить очистку базы данных, чтобы использовать стратегию усечения, а не транзакции.

+0

см. Подробное объяснение на http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/ – John

Смежные вопросы