Настройка RSpec / Capybara без Rails для объектов страницы / файлов поддержки? - PullRequest
0 голосов
/ 03 апреля 2019

Итак, я собираюсь написать фреймворк, использующий Rspec / Capybara и Selenium, чтобы провести некоторое автоматизированное тестирование приложения. Я использую только RSpec (без рельсов), и у меня возникают некоторые трудности с правильной настройкой.

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь включить объектные файлы страниц в свои спецификации. Прямо сейчас мой каталог выглядит так:

spec (Актуальные файлы .spec находятся здесь, spec_helper также здесь) spec / support (здесь объектные файлы страниц)

В моих объектных файлах страницы моя первая проблема в том, что он не может найти Capybara DSL, если я не сделаю: include Capybara::DSL вверху каждого объектного файла страницы (что, очевидно, не является хорошей идеей в соответствии с предупреждением дает мне)

Другая проблема заключается в том, что при включении объектных файлов моей страницы в мои тесты мне нужно сделать require_relative для конкретного файла (что является своего рода болью), в противном случае он не может найти класс.

Есть ли в spec_helper что-то, что исправит это? Я не эксперт в рубине, поэтому я предполагаю, что что-то упустил. Проблема с Capybara DSL, которую я не могу понять, например, требующая require 'capybara/rspec', похоже, тоже не помогает.

1 Ответ

1 голос
/ 03 апреля 2019

У вас есть несколько вариантов для Capybara :: DSL -

  1. Включите Capybara :: DSL в любой базовый класс, который вы используете для своих PageObjects, чтобы методы Capybara были доступны в этом классе (в отличие от глобального объекта) - т.е. include Capybara::DSL входит в определение класса, а не вверху файла.

  2. Сохраните экземпляр Capybara :: Session в экземплярах объекта страницы и вызовите все методы capybara для этого экземпляра сеанса - @my_session.find(...) и т. Д.

  3. Всегда использовать Capybara.current_session при вызове методов Capybara - Capybara.current_session.find(...) и т. Д.

Что касается проблемы require - вы можете либо использовать require_relative, чтобы указать файлы, которые требуются на основе текущего файла, либо использовать require и указать местоположение из корневого каталога проектов (текущий рабочий каталог). Если у вас есть каталог файлов, которые вы хотите загрузить, вы можете добавить что-то вроде следующего в ваш spec_helper.rb, чтобы сказать ему о необходимости загрузки всех файлов

Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }
...