Нужен ли мне собственный контроллер Devise, если только изменилось представление регистрации? - PullRequest
7 голосов
/ 18 мая 2011

У меня есть следующие шаги в интеграционном тесте capybara / rspec, который просто пытается зарегистрировать нового участника.

 visit new_member_registration_path
 fill_in('Name:',                     :with => 'Rob Doe' )
 fill_in('member_email',              :with => 'rob@smith.com' )
 fill_in('member_email_confirmation', :with => 'rob@smith.com' )
 fill_in('member_password',           :with => 'secret')
 fill_in('Company or Venue Name:',    :with => 'Rob Inc.')
 fill_in('Contact Number:',           :with => '040544404440')
 click_button('Sign up')
 save_and_open_page

По какой-то причине данные 'email' и 'password' не являютсяпередается в контроллер DeviseRegistrations (он пуст при просмотре журнала тестирования) и, следовательно, вызывает сбой проверки.Однако вплоть до страницы save_and_open_page ошибок rspec нет (поэтому эти поля заполнены ).

Чего мне не хватает?Нужно ли создавать подкласс контроллера DeviseRegistrations?

Протестировано на Rails 3.0.7 с тестом на стойку 0.5.7 и рейками 3.1rc1 и тестом на стойку 0.6.0

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Если в вашем Gemfile есть отладчик, вот как вы можете его использовать.(Предполагается, что вы используете драйвер Rack для Capybara.)

# test.rb
visit new_member_registration_path
fill_in('Name:',                     :with => 'Rob Doe' )
debugger

Терминал остановит ваш скрипт и будет ждать, пока вы что-то сделаете.

# Terminal
/file/path/to/you/test.rb:12
fill_in('Name:',                     :with => 'Rob Doe' )
(rdb:1)

Откройте сеанс IRB здесь:

(rdb:1) irb

Вы можете использовать любой метод RSpec или Capybara здесь:

>> current_path.should == 'foo/bar'

Попробуйте отправить форму на этомpoint:

>> click_button "Sign Up"
>> save_and_open_page

Посмотрите, какие сообщения об ошибках выдает Devise на открывшейся странице.С драйвером Rack вы не увидите заполненных полей. В этом случае вы можете попробовать использовать драйвер Selenium

# test.rb
Capybara.default_driver = :selenium
visit new_member_registration_path

Однако вы не можете управлять Capybara из IRB, используяСелен водительТем не менее, вы сможете увидеть, какие значения формы Selenium вносит в вашу форму.Поскольку с Selenium все происходит быстро, вы можете использовать отладчик, чтобы приостановить тест, а также проверить страницу, которую Selenium открыла в вашем браузере.

2 голосов
/ 23 мая 2011

Проблема была в файле макета приложения. У меня была другая (хотя и скрытая) форма, которая публиковала пустые поля формы.

После того, как я создал пустой проект и увидел, что он работает отлично, я очищал все потенциальные части своего приложения, пока не нашел виновника.

Таким образом, ответ на вопрос: нет, пользовательский контроллер устройства не требуется при использовании пользовательских представлений устройства.

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