У меня настроены транзакции в моем rails_helper ...

config.use_transactional_fixtures = true

Мои перед каждым блоком выглядят так:

before(:each) do
  allow(subject).to receive_messages(
    :authenticate => true,
    :authorize => true
  )

@user_song = FactoryGirl.create(:user_song)
FactoryGirl.create(:user_playlist, user_id: @user_song.user_id, 
  album_id: @user_song.song.album_id)

allow_any_instance_of(ApplicationController).to receive_messages(
  :current_user => @user_song.user
)

Тесты завершаются неудачно с ошибками проверки, но если я вставлю Model.destroy_all для каждой использованной модели перед созданием FactoryGirl, это сработает. Я в замешательстве.

Зачем? В справочнике Rspec rails говорится, что его следует откатить? Это что-то с FactoryGirl?

0
codeblooded 5 Янв 2016 в 19:18

3 ответа

Лучший ответ
config.use_transactional_fixtures = true

Предназначен для очистки встроенных исправлений Rails. Это завело работу с factory_girl. Вы должны отключить это и установить драгоценный камень для очистки базы данных, например этот: https://github.com/DatabaseCleaner/database_cleaner < / а>

2
Babar Al-Amin 5 Янв 2016 в 16:29

Вам необходимо установить и настроить гем для очистки баз данных. При правильной настройке и установке он решит эту проблему. Есть много статей в блогах, которые помогут с настройкой и установкой, если github прочитал мне документы, которые мне кажутся запутанными. Например, это статья

1
MilesStanfield 5 Янв 2016 в 16:33

Попробуйте настроить чистильщик баз данных.

Добавьте это в свой Gemfile

gem 'database_cleaner'

Затем обновите свой spec/rails_helper.rb:

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end
2
tokhi 6 Янв 2016 в 09:03