Хорошо, таким образом, я имею, столкнулся с очень странной проблемой, непосредственно соединенной с перед блоками. Я делаю интеграционное тестирование через 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 или чему-то).
Вероятно, у вас включены транзакционные фичи, поэтому ваш процесс Watir не видит изменений базы данных внутри транзакции, в которую обернут каждый пример RSpec.
Попробуйте отключить транзакционные фичи и использовать что-то вроде database cleaner, чтобы получить чистый лист перед каждым примером.