2011-05-03 5 views
2

Я написал несколько тестов с использованием Capybara, но я не использую селен и никаких других драйверов JS. Но я сомневаюсь, могу ли я протестировать метод уничтожения таким образом? Так как мне нужно, чтобы подтвердить подтверждение JS и данных-метод = «удалить» не может быть посещен ...Тестирование методов уничтожения с помощью capybara

Я хотел бы сделать что-то очень способ водосвинку как:

визита «/ люди/123 ',: data-method =>' delete '

Вы, ребята, знаете, есть ли способ сделать это?

Спасибо заранее, Andre

ответ

4

Rails имеет JavaScript код, который генерирует форму по ссылке в href и data-method атрибутов и отправляет его; это не сработает без JS.

Один из способов проверить это: во-первых, проверьте наличие ссылки и соответствующие атрибуты (href, data-method), затем введите запрос удаления вручную с помощью Capybara::RackTest::Driver#delete method. Если вы это часто делаете, напишите вспомогательный метод, который будет обертывать эти два шага.

+0

Спасибо за ваш ответ. Кроме того, я нашел сообщение в блоге о той же проблеме (http://blog.ardes.com/2010/4/28/capybara-and-rack-test-sessions-and-http-methods), и ему удалось это решить с строками: rack_test_session_wrapper = Capybara.current_session.driver rack_test_session_wrapper.process: delete, mycontrollerpath (@item) – AndreDurao

4

Просто, что нужно знать с ответом @Mike Mazur, если ваш контроллер выполняет перенаправление по действию #destroy, вызов метода удаления на драйвере Capybara фактически не следует за перенаправлением. Вместо этого он просто заполняет сообщение response сообщением перенаправления, то есть body == <html><body>You are being <a href=\"http://www.example.com/model_names\">redirected</a>.</body></html> и status_code == 302.

Итак, чтобы все, что вам нужно было бы ожидать от обычного Capybara click_button 'Delete Model', вам нужно будет вручную выполнить перенаправление. Один способ (без запаха и RSpec):

Capybara.current_session.driver.delete controller_path(model_instance) 
Capybara.current_session.driver.response.should be_redirect 
visit Capybara.current_session.driver.response.location 
+1

ничего себе это прекрасно. Благодарю. Любая причина, по которой вы указываете Capybara.current_session, просто используя страницу? – davekaro

Смежные вопросы