Записи, созданные в Rspe c, не доступны в новых темах? - PullRequest
1 голос
/ 08 января 2020

В Rspe c я создаю записи, например, let!(:user) { create(:user) }.

Я могу получить доступ к новому пользователю в Rspe c и в основной ветке темы. Оба возвращают пользователя:

puts User.all.to_a
puts ActiveRecord::Base.connection.exec_query('select * from users')

Однако теперь я могу больше получать доступ к пользователю в новой теме:

Thread.new do
    puts User.all.to_a
    puts ActiveRecord::Base.connection.exec_query('select * from users')
end

Как это исправить? Это просто проблема Rspe c? Я не думаю, что смогу воспроизвести его в консоли Rails.

1 Ответ

2 голосов
/ 08 января 2020

Вы, вероятно, настроили RSpe c для запуска своего теста в транзакции базы данных

Цитата из RSpe c Документы :>

Когда вы запускаете rails generate rspec:install, файл spec/rails_helper.rb включает следующую конфигурацию:

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end

Название этого параметра немного вводит в заблуждение. Что в действительности означает в Rails, так это «запускайте каждый метод тестирования в транзакции». В контексте rspe c -rails это означает «запускать каждый пример внутри транзакции».

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

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

Но это означает, что ваша тестовая база данных больше не будет очищаться от тестовых данных автоматически после завершения теста. Вместо этого вам нужно будет удалить тестовые данные вручную или использовать другой гем (например, database_cleaner) для сброса базы данных после выполнения тестов.

...