Вы можете избежать этого, запустив тесты вручную
ruby -Itest test/unit/some_test.rb
Это задача rake, которая выполняет воссоздание тестовой базы данных (вы можете запустить ее вручную так)
rake db:test:prepare
Но я предлагаю вам сделать это неправильно.Общая идея тестирования заключается в том, что вы знаете состояние базы данных и, следовательно, знаете, чего ожидать от функции.
например.
test "search_by_name" do
expected = User.all.select{|u| u.name =~ /arthur/i}
assert_equal expected, User.search_by_name("Arthur")
end
- это хороший тест, однако, если выне знаете состояние БД, откуда вы знаете, что есть Артур?
Тест, описанный выше, пройдет в трех плохих случаях;
- нет записей пользователя
- все пользователи называются "Артур"
- нет пользователей, называемых arther.
Так что лучше создать ложную реальность, в которой мы знаем состояниебаза данных.
Мы хотим;
- хотя бы одного пользователя с именем "Артур"
- хотя бы одного пользователя с именем "Артур" в составе другогоword
- хотя бы один пользователь, не являющийся Артуром.
лучший тест, при условии, что база данных пуста, и с использованием Factory Girl может быть.
test "search_by_name" do
expected = [
Factory.create(:user, :name => "Arthur"),
Factory.create(:user, :name => "MacArthur")
]
not_expected = [Factory.create(:user, :name => "Archer")]
assert_equal expected, User.search_by_name("Arthur")
end