Как я могу использовать Cucumber для тестирования Rememberable функциональности Devise? - PullRequest
7 голосов
/ 12 августа 2010

Мне бы хотелось, чтобы функция Cucumber проверяла запоминающуюся функциональность устройства devise (файл cookie помни меня).

С помощью капибары легко установить флажок запомнить меня, но как мне имитировать возвращение пользователя на сайт после закрытия окна?

Ответы [ 5 ]

1 голос
/ 17 декабря 2010

Суть nruth была действительно полезной, но я чувствовал, что удаление cookie по имени - это обман.Я создал шаг, который удаляет файлы cookie, которые браузер удаляет при закрытии и перезапуске (любой файл cookie без даты истечения срока действия, установленной и установленной в будущем).

Вы можете увидеть его в this commit (хотя я сделал это только для драйвера RackTest, так как у меня нет настройки Selenium).Вы также можете увидеть мою функцию login / Remember_me в this commit .И я реорганизовал классы для разделения файлов в этом коммите .

Надеюсь, это полезно.

1 голос
/ 27 августа 2010

Я придумал следующий хак-тест для рэка и немного более чистое использование API-селена, чтобы проверить функциональность Devise запомнить меня в огурце / капибаре. Он просто говорит водителю вручную стереть сессионный cookie. Поддерживаются не все драйверы, я реализовал только два, которые использовал:

http://gist.github.com/484787

Предполагается, что файл cookie хранит сеанс. Удалите тег @announce из сценария, чтобы избавиться от многословия.

Другой вариант, предложенный Мэттом Уинном в обсуждении списка рассылки , может искать другие хранилища файлов cookie и удалять их путем запроса или удаления файла:

Поднятая из гибких рельсов книга:

config.action_controller.session_store = CGI::Session::PStore (or just :p_store)
config.action_controller.session_options[:tmpdir] = "/Users/dave/tmp" 
config.action_controller.session_options[:prefix] = "myapp_session_"

или

rake db:sessions:create
config.action_controller.session_store = :active_record_store

В Rails также есть метод сброса сеанса, но я считаю, что у нас нет к нему доступа, потому что мы не можем подключиться к сеансу rails при тестировании с капибарой.

Надеюсь, это поможет,

Ник

0 голосов
/ 11 июня 2015

Вы можете использовать show_me_the_cookies для этого, как показано ниже:

And(/^I leave the site$/) do
  expire_cookies
end
0 голосов
/ 27 августа 2010

Полагаю, вы могли бы выйти из системы с помощью capybara, а затем снова войти в систему, например,

Given I am on the login screen
And I select 'Remember Me'
And I click 'login'
Then I should be 'logged in'
When I click 'log out'
Then I should be 'logged out' #=> potentially destroy a session here?
When I click log in
Then I should be logged in
And I should not be directed to the login form.

. Это должно использовать текущее состояние cookie cabybara для моделирования этого потока.

0 голосов
/ 12 августа 2010

Я использовал email-spec для этого. Мой сценарий выглядит следующим образом:

@allow-rescue
Scenario: Create New Account (Everything cool)
Given I am not authenticated
When I go to register
And I fill in "Name" with "bill"
And I fill in "Email" with "bill@example.com"
And I fill in "Password" with "please"
And I fill in "Password Confirmation" with "please"
And I press "Sign up"
Then "bill@example.com" should receive an email
And I open the email
And I should see "Confirm my account" in the email body
When I follow "Confirm my account" in the email
Then I should see "Your account was successfully confirmed. You are now signed in."

Обратите внимание на украшение @ allow-rescue над сценарием, которое необходимо при использовании Devise.

Надеюсь, это поможет.

...