Вы можете повысить эффективность посева с помощью новых направляющих 6 insert_all
. Это создает несколько записей с одним insert
и не создает экземпляры моделей. OTOH это не делает никакой проверки, поэтому будьте осторожны.
DictionaryWords.insert_all([
{ word: "foo" },
{ word: "bar" },
])
В качестве альтернативы используйте activerecord-import .
Но лучше не делать Всего 180 000 слов.
Проблема с семенами и приспособлениями в том, что они «один размер подходит всем». Они должны охватывать все возможные ситуации для разработчиков и тестирования. Они agile, одно изменение в семени может таинственным образом нарушить многие тесты, которые делали предположения о приборах. Семена будут сдуты, если вам потребуется сбросить ваши базы данных.
Вместо этого используйте factory и создайте то, что вам нужно, когда вам это нужно. Используйте такую библиотеку, как Faker для создания поддельных, но действительных данных.
Например ...
# Assuming you have classes called Dictionary and DictionaryWord
factory :dictionary do
end
factory :dictionary_word do
dictionary
word { Faker::Lorem.unique.word }
end
Затем в ваших тестах создайте слова, которые вам нужны. Здесь я использую RSpe c.
let(:dictionary) { create(:dictionary) }
let!(:words) { create_list(:dictionary_word, 3, dictionary: dictionary) }
context 'when the word is in the dictionary' do
let(:word) { words.sample }
it 'finds the word' do
expect( dictionary.exists?(word) ).to be_truthy
end
end
context 'when the word is not in the dictionary' do
let(:word) { "septemburary" }
it 'does not find the word' do
expect( dictionary.exists?(word) ).to be_falsey
end
end
И если вам нужно больше слов для ручного тестирования, откройте консоль и введите несколько.
[1] pry(main)> FactoryBot.create_list(:dictionary_words, 100)
Это не особенно эффективно, но вам, вероятно, не нужно 180 000 слов.