RSpec: всесторонние различия между прежде (: все) и прежде (: каждый)

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

Таким образом, я поместил следующий код:

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

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

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

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

7
задан S.L. Barth - Reinstate Monica 25 July 2012 в 07:55
поделиться

1 ответ

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

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

3
ответ дан 7 December 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: