Rake db: test: prepare не создает `table view`

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

Я сделал это с использованием MySQL Views, все прошло отлично, за исключением моих тестов. Кажется, что стратегия Database Cleaner не сохраняет данные в базе данных, и мое представление никогда не было заполнено.

Я переместил стратегию от :transaction до :truncation, и данные начали сохраняться. Но я все еще с проблемой, я продолжаю не читать данные из представления.

# spec/spec_helper.rb
config.before(:each, using_view: true) do
  DatabaseCleaner.strategy = :truncation
end

# spec/models/stats/answer.rb
describe 'POC test', using_view: true do
  it 'works fine without the table view' do
    expect{ create(:answer) }.to change{ Answer.count }
    expect{ create(:knowledge_answer) }.to change{ Knowledge::Answer.count }
  end

  it 'works fine with the table view' do
    expect{ create(:answer) }.to change{ Stats::Answers.count }
    expect{ create(:knowledge_answer) }.to change{ Stats::Answers.count }
  end
end

И когда я его выполнил:

Stats::Answers
  POC test
    works fine with the table view (FAILED - 1)
    works fine without the table view

Failures:

  1) Stats::Answers POC test works fine with the table view
     Failure/Error: expect{ create(:answer) }.to change{ Stats::Answers.count }
       expected result to have changed, but is still 0
     # ./spec/models/stats/answers_spec.rb:18:in `block (3 levels) in <top (required)>'

Finished in 4.75 seconds (files took 30.37 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/models/stats/answers_spec.rb:17 # Stats::Answers POC test works fine with the table view

После многих исследований выяснилось, что rake db:test:prepare создавал представление как обычную таблицу, а не как представление, так как он использует db/schema.rb для генерации схемы тестовой базы данных. Теперь мне нужно узнать, как сгенерировать представление в тесте вместо обычной таблицы.

Любые мысли?

UPDATE:

По-прежнему не создавать представления в схеме, даже используя:

config.active_record.schema_format = :sql

Ответ 1

Для представлений есть замечательная жемчужина, называемая Scenic, которую вы можете использовать непосредственно для создания представлений, я использовал ее раньше, и она отлично работает с Rspec.

Вот ссылка на учебник, как его использовать