Из всего, что я читал о спецификациях новой системы Rails 5.1, я понял, что Rails теперь обрабатывает транзакции базы данных внутренне.
Из блога Rspec: "[ранее] ваши тесты и тестируемый код не могли совместно использовать транзакцию базы данных, и поэтому вы не можете использовать встроенный механизм RSpec для отката изменений в базе данных, вместо этого требуется очиститель базы данных, похожий на самоцвет. В системных тестах Rails Команда проделала большую работу, чтобы убедиться, что это не так, и поэтому вы можете безопасно использовать механизм RSpec, не требуя дополнительного драгоценного камня ".
Мой опыт отличается:
- Все мои тесты Rspec проходили после обновления до Rails 5.1.
- Я переименовал спецификации "feature" в "system". Все тесты пройдены.
- Я удалил гем Database Cleaner и удалил все ссылки из
rails_helper.rb
. Тесты JS теперь не проходят из-за ошибокvalidates uniqueness
. Тесты не JS проходят.
Мои тесты очень просты.
let(:subject) { page }
let(:user) { create :user, name: "TestUser" }
it "displays the user page", :js do
visit user_path(user)
it is_expected.to have_content "TestUser"
end
При отключенном очистителе базы данных и :js => true
я получаю user named TestUser already exists
. С :js => false
тест проходит.
Какова текущая ситуация с системными тестами и rspec? Rails обрабатывает транзакции базы данных внутренне, или все еще требуется очиститель базы данных? Кто-нибудь сталкивался с этим или может указать мне на соответствующую информацию?