Как обрабатывать куки при тестировании с Webrat? - PullRequest
1 голос
/ 25 марта 2009

Я пишу тесты Cucumber для приложения на основе Sinatra с использованием Webrat. Для некоторых тестов мне нужно реализовать сценарий типа

Given I am logged in as admin
When I am visiting "/"
Then I should see "Settings" 

Я определяю шаги следующим образом:

Given /^I am logged in as "(.+)"$/ do |user|
    visit "/login"
    fill_in "login", :with => user
    fill_in "password", :with => "123456"
    click_button "Login"
end

When /^I am viewing "(.+)"$/ do |url|
    visit(url)
end

Then /^I should see "(.+)"$/ do |text|
    response_body.should =~ /#{text}/
end

В случае успеха создается cookie

response.set_cookie(cookie_name, coockie_value)

и затем проверяется в представлениях, когда пользователь пытается получить доступ к страницам администратора с помощью вспомогательного метода:

def logged_in?
    request.cookies[cookie_name] == cookie_value
end

И, похоже, Вебрат не хранит куки. Тесты не сообщают ни об одной ошибке, но "logged_in?" в представлениях всегда ложно, как куки не был сохранен.

Я что-то не так делаю? Если это именно то, как работает Webrat, какой лучший обходной путь?

Ответы [ 3 ]

1 голос
/ 27 января 2010

Настоящая проблема заключается в том, как Синатра обрабатывает сессии в тестовой среде. Поищите обсуждение в группе Google, но реальное решение - просто использовать:

use Rack::Session::Cookie

и не

enable :sessions

Использование Selenium - это хорошо, но это излишнее решение проблемы ОП.

0 голосов
/ 08 апреля 2009

У вас может быть ваш шаг "данные / ^ я вошел в систему" logged_in?:

Given /^I am logged in as "(.+)"$/ do |user|
    visit "/login"
    fill_in "login", :with => user
    fill_in "password", :with => "123456"
    click_button "Login"

    ApplicationController.class_eval <<-EOE
      def current_user
        @current_user ||= User.find_by_name(#{EOE})
      end
    end
EOE
end

Есть два недостатка:

  1. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1007* * * * * * * * * * * * * * * * * * '.
  2. Будет сложно издать "выход"
0 голосов
/ 26 марта 2009

Обходной путь - использовать Webrat с серверной частью Selenium. Он запускает все тесты в отдельном окне Firefox, поэтому файлы cookie или javascript не являются проблемой. Недостатком является дополнительное время и ресурсы, необходимые для запуска Firefox и выполнения всех реальных кликов, рендеринга и т. Д.

...