Ruby on Rails - База данных тестирования - PullRequest
4 голосов
/ 11 июля 2011

Есть ли способ предотвратить очистку Rails тестовой базы данных перед запуском теста?Я хочу использовать копию моей производственной базы данных для тестирования, поэтому мне нужно, чтобы rails не очищал данные каждый раз.Я предполагаю, что заполнение БД займет много времени.

Спасибо, Майк

Ответы [ 2 ]

6 голосов
/ 11 июля 2011

Вы можете избежать этого, запустив тесты вручную

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

- это хороший тест, однако, если выне знаете состояние БД, откуда вы знаете, что есть Артур?

Тест, описанный выше, пройдет в трех плохих случаях;

  1. нет записей пользователя
  2. все пользователи называются "Артур"
  3. нет пользователей, называемых arther.

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

Мы хотим;

  1. хотя бы одного пользователя с именем "Артур"
  2. хотя бы одного пользователя с именем "Артур" в составе другогоword
  3. хотя бы один пользователь, не являющийся Артуром.

лучший тест, при условии, что база данных пуста, и с использованием 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
0 голосов
/ 11 июля 2011

Позвольте мне предвосхитить это, сказав, что вы обычно не хотите использовать производственные данные для тестирования.При этом ...

Вы можете загрузить «начальные» данные, но убедитесь, что у вас нет для них никаких данных, иначе они будут удалены при каждом запуске теста.* этот ответ о способах автоматического заполнения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...