Тестирование целевого атрибута ссылки с помощью Capybara/RSpec - программирование
Подтвердить что ты не робот

Тестирование целевого атрибута ссылки с помощью Capybara/RSpec

Я немного новичок в Rails/RSpec/Capybara, поэтому это, вероятно, вопрос новичков, но Google не помог так сильно, как я бы надеялся. Я надеялся, что смогу использовать

it { should have_link('link text', href: 'url', target: '_blank') }

чтобы написать тест для ссылки, которая должна открыться в новом окне, но это не работает. Я также попробовал обернуть хэш элементов в фигурных скобках:

it { should have_link('link text', {href: 'url', target: '_blank'}) }

Тест всегда будет успешным, независимо от наличия или значения целевого атрибута на фактической странице и тестируемой ссылке. Изменение атрибута href вызывает потерю теста, как ожидалось. Я думал, что хэш настроек для has_link был списком атрибутов для тестирования. Видимо, я ошибаюсь, но какой лучший способ протестировать одну ссылку для этого целевого атрибута? Надеюсь, он не будет использовать поиск XPath...

4b9b3361

Ответ 1

Я не уверен, почему ваш код не работает. Вы пробовали это:

find_link('link_text')[:href].should == 'url'
find_link('link_text')[:target].should == '_blank'

Ответ 2

Вы можете сделать:

it { should have_css "a[href~='/somewhere'][target~='_blank']" }

Ответ 3

Использование нового синтаксиса rspec 3:

is_expected.to have_link('link_text', href: 'url')
expect(find_link('link_text')[:target]).to eq('_blank')

Ответ 4

Определите пользовательский соединитель, который находит ссылку и проверяет свой атрибут target '_blank':

RSpec::Matchers.define :have_link_open_in_new_window do |locator, options={}|
  match do |page|
    link = page.find_link(locator, options)
    link && link[:target] == '_blank'
  end
end

Используйте have_link_open_in_new_window(locator, options), как вы бы использовали have_link(locator, options):

expect(page).to have_link_open_in_new_window('Link text or id', href: '...')