RSpec: глубокие различия между до (: все) и до (: каждый) - PullRequest
7 голосов
/ 08 апреля 2010

Хорошо, я столкнулся с очень странной проблемой, напрямую связанной с предыдущими блоками. Я делаю интеграционное тестирование через Watir и RSpec. Чтобы проверить, может ли пользователь выполнить вход, я создаю запись «user» в БД с помощью factory_girl.

Поэтому я поставил следующий код:

before(:each) do
  @user = Factory(:user)
end

if "should perform a login" do
  # do stuff
end

В do stuff Я вызываю браузер и вижу, как пользователь пытается войти. К сожалению, почему-то он не может этого сделать - «Неверное имя пользователя».

После некоторого исследования я обнаружил, что если я помещаю код для создания пользователя в блок before(:all), все волшебным образом работает . Как это? В чем разница между :all и :each в этом контексте? Кроме того, если я на самом деле помещаю код для создания пользователя в тело теста, он все равно не работает (т.е. пользователь каким-то образом не добавляется в БД или что-то в этом роде).

1 Ответ

3 голосов
/ 15 мая 2010

Возможно, у вас включены транзакционные фиксации, поэтому ваш процесс Watir не видит изменений базы данных внутри транзакции, в которую включен каждый пример RSpec.

Попробуйте отключить транзакционные функции и используйте что-то вроде очиститель базы данных , чтобы получить чистый лист перед каждым примером.

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