Где записи factory_girl? - PullRequest
       13

Где записи factory_girl?

3 голосов
/ 25 марта 2010

Я пытаюсь выполнить интеграционный тест с помощью Watir и RSpec . Итак, я создал тестовый файл в / интеграции и написал тест, который добавляет тестового пользователя в базу через factory_girl .

Проблема в том, что я не могу войти в систему с моим тестовым пользователем. Тест, который я написал, выглядит следующим образом:

...

before(:each)
  @user = Factory(:user)
  @browser = FireWatir::Firefox.new
end

it "should login"
  @browser.text_field(:id, "username").set(@user.username)
  @browser.text_field(:id, "password").set(@user.password)
  @browser.button(:id, "get_in").click
end

...

Когда я запускаю тест и вижу «производительность» в браузере, он всегда вызывает ошибку Username is not valid.

Я начал расследование и сделал небольшой трюк. Прежде всего, я начал сомневаться, действительно ли фабрика создает пользователя в БД. Таким образом, после немедленного вызова фабрики я поместил некоторые вещи puts User.find только для того, чтобы обнаружить, что пользователь на самом деле в БД. Хорошо, но поскольку пользователь все еще не мог войти, я решил посмотреть, присутствует ли он в БД моими собственными глазами.

Я добавил sleep сразу после заводского вызова и пошел посмотреть, что в БД в данный момент. Я был сокрушен, чтобы видеть, что пользователь фактически отсутствует там! Как так? Тем не менее, когда я пытаюсь вывести пользователя в коде, его фактически откуда-то извлекают. Так, где лежат записи, сделанные factory_girl во время выполнения? Это test или dev DB? Я не понимаю.

Я 10 раз проверял, запускаю ли я свой Mongrel в режиме test (имеет ли это значение? Думаю, так и есть, как я пытаюсь настроить интеграционный тест), и если мой database.yml содержит правильные данные для подключения.

Я использую authlogic , если это может дать какую-либо подсказку (нет, установка activate_authlogic здесь не работает).

Ответы [ 3 ]

4 голосов
/ 27 марта 2010

Не забывайте, что RSpec, вероятно, использует преобразования при запуске спецификаций. RSpec обернет выполнение спецификации в транзакции и откат в конце. Это означает, что вы не сможете увидеть запись извне этой транзакции (т.е. из другого соединения SQL).

Если вы хотите убедиться, что запись пользователя действительно создана Factory Girl, вы можете сделать что-то вроде:

before(:each)
  @user = Factory(:user)
  User.find_by_username(@user.username).should_not be_nil
  @browser = FireWatir::Firefox.new
end
2 голосов
/ 30 марта 2010

Каким-то образом решение оказалось странным - я поставил фабрики в блок before (: all), и все вещи работали как надо.

0 голосов
/ 29 марта 2010

Factory Girl собирается создать временные записи в вашей тестовой базе данных. Ваша тестовая база данных будет очищаться после каждого теста.

...