Заглушка сессии Capybara для теста объекта страницы - PullRequest
3 голосов
/ 21 сентября 2011

Я использую Cucumber с объектом страницы , похожим на упрощенную версию, показанную ниже. Мне нужно сделать довольно сложный анализ HTML, поэтому я хотел бы иметь возможность провести модульное тестирование объекта страницы изолированно, используя RSpec, против приспособления HTML, но я немного застрял при этом. Я предполагаю, что мне нужно что-то заглушить в Капибаре и передать как зависимость?

class SomePage
  def header
    session.find('h1').text
  end
  def title
    session.find('title').text
  end

  private
  def session
    @session ||= Capybara.current_session
  end
end

1 Ответ

4 голосов
/ 22 сентября 2011

Чтобы ответить на мой собственный вопрос, я обнаружил, что у Capybara есть метод #string, который принимает кусок HTML и возвращает:

Capybara :: Node :: Simple, который выставляет все Capybara :: Node :: Matchers и Capybara :: Node :: Finders. Это позволяет вам запрашивать любую строку, содержащую HTML, точно так же, как вы запрашиваете текущий документ в сеансе Capybara.

Итак, я просто добавил в свой класс инициализатор, чтобы этот узел можно было передавать и использовать вместо сеанса Capybara. Нет необходимости заглушки или насмешки, и он делает именно то, что мне нужно.

...