У меня есть две таблицы с почти такой же структурой в моем проекте, один из которых использовался для вычисления статистики пользователей, а другой для этого никогда не использовался. Теперь мне нужно рассчитать статистику, используя оба из них.
Я сделал это с использованием 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