Nano Hash - криптовалюты, майнинг, программирование

Как обрабатывать файлы cookie при тестировании с помощью Webrat?

Я пишу тесты 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

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

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

25.03.2009

  • Используете ли вы собственную реализацию браузера Webrat или серверную часть Selenium? Последний фактически запускает ваше приложение в отдельном процессе, что означает, что вы не можете получить доступ к большинству состояний Rails из своих тестов. 25.03.2009
  • emk: спасибо, это работает с серверной частью Selenium! 26.03.2009

Ответы:


1

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

use Rack::Session::Cookie

и нет

enable :sessions

Использование Selenium — это хорошо, но это излишество в качестве решения проблемы OP.

27.01.2010

2

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

26.03.2009

3

У вас может быть пошаговый хак «Дано /^ Я вошел в систему» ​​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. Это действительно хакерство, чтобы смешивать проблемы уровня представления и уровня контроллера, подобные этому.
  2. Будет сложно смоделировать «выход из системы»
08.04.2009
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..