выберите конкретную ссылку по href с webrat - PullRequest
1 голос
/ 24 мая 2011

Я пишу интеграционный тест для rspec и хочу проверить, что нажатие на ссылку приводит к правильной странице модели.Более конкретно, я хочу проверить это в списке ссылок, которые имеют одинаковое имя, но разные базовые URL.

Из того, что я узнал, вы не можете использовать селектор атрибутов css с click_link, так как он ищет только конкретный текст или идентификатор домена.Вместо этого я пытаюсь использовать метод webrat within, но как только я выберу ссылку, как ее щелкнуть?Я полагал, что link.click в области действия ссылки будет работать, но он не сможет сказать, что метод click не определен:

Failure/Error: link.click
NoMethodError:
  undefined method `click' for #<Webrat::Scope:0x0000010505ae00>

Вот мой тест:

require 'spec_helper'

describe "BrandLinks" do
  before(:each) do
    @base_title = "My App - "

    @brand = Factory(:brand)
    second = Factory(:brand) # <= Same name, different slug
    third = Factory(:brand, :name => "Awesome USA Brand!!")
    @brands = [@brand, second, third]
  end

  it "should show me the brand page when I click on a brand link" do
    get '/brands'
    within "a[href=#{brand_path(@brand)}]" do |link|
      link.click
    end
    response.should be_success
    response.should have_selector(
      "title", 
      :content => "#{@base_title}Brand - #{@brand.name}"
    )
  end
end

Ответы [ 2 ]

0 голосов
/ 19 октября 2011

Во-первых, сообщение об ошибке заключается в том, что метод .click не определен. Попробуйте .click_link вместо этого.

Вам также понадобится текст ссылки. Таким образом, within определяет область действия, а click_link сообщает ему, какую ссылку щелкнуть внутри этой области.

within "a[href=#{brand_path(@brand)}]" do |scope| # within a specific <a> tag
  scope.click_link @brand # click on @brand text
end

click_link_within - это ярлык для плюса внутри click_link, поэтому он должен быть идентичен приведенному выше:

click_link_within "a[href=#{brand_path(@brand)}]", @brand

Я все еще пытаюсь понять, как работают селекторы within (именно так я нашел этот вопрос!). Вот что у меня так далеко:

Метод within объекта Webrat Session * принимает аргумент selector, который он использует для помещения новой области в стек, передавая селектор в Scope.from_scope , который создает новый сеанс с @selector = selector. Пока я не могу найти определение selector. В этом 2009 сообщении в блоге говорится, что селектор может быть CSS-типом, классом или идентификатором, но он не ссылается на этот источник.

0 голосов
/ 24 мая 2011

Вы пробовали click_link_within ?Согласно документам

Работает как click_link, но ищет только текст ссылки внутри данного селектора

...