Я создаю приложение Rails 3, используя Devise, с Capybara для тестирования пользовательского интерфейса. Следующий тест не пройден:
class AuthenticationTest < ActionController::IntegrationTest
def setup
@user = User.create!(:email => 'test@example.com',
:password => 'testtest',
:password_confirmation => 'testtest')
@user.save!
Capybara.reset_sessions!
end
test "sign_in" do
# this proves the user exists in the database ...
assert_equal 1, User.count
assert_equal 'test@example.com', User.first.email
# ... but we still can't log in ...
visit '/users/sign_in'
assert page.has_content?('Sign in')
fill_in :user_email, :with => 'test@example.com'
fill_in :user_password, :with => 'testtest'
click_button('user_submit')
# ... because this test fails
assert page.has_content?('Signed in successfully.')
end
end
... но я понятия не имею, почему. Как видно из кода, пользователь создается в базе данных; Я использую тот же подход для создания пользователя, что и в seed.rb.
Если я запускаю тест через отладчик, я вижу пользователя в базе данных и проверяю, загружается ли страница. Но все равно аутентификация не удалась; Я могу проверить это, потому что если я изменю утверждение для проверки на случай сбоя, тест пройдёт:
# verify that the authentication actually failed
assert page.has_content?('Invalid email or password.')
Я привык к Rails 2 и использую Selenium для такого рода тестирования, так что я подозреваю, что делаю что-то глупое. Может ли кто-нибудь, пожалуйста, указать мне правильное направление здесь?