2012-06-05 4 views
16

Soy un poco nuevo en Rails/RSpec/Capybara, así que esta es probablemente una pregunta para novatos, pero Google no me ayudó tanto como esperaba. Tenía la esperanza de que podría utilizarProbando el atributo de destino de un enlace con Capybara/RSpec

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

escribir una prueba para un vínculo que debe abrir en una nueva ventana, pero eso no parece funcionar. También he intentado envolver el hash de opciones de entre llaves:

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

La prueba tendrá éxito siempre independientemente de la presencia o el valor del atributo de destino en la página real y el enlace que se está probando. Cambiar el atributo href causa un error de prueba como se esperaba. Pensé que el hash de opciones para have_link era una lista de atributos para probar. Aparentemente estoy equivocado, pero ¿cuál es la mejor manera de probar un solo enlace para su atributo objetivo? Esperemos que no se use una búsqueda XPath ...

Respuesta

25

No estoy seguro de por qué tu código no funciona. ¿Has probado esto:

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

que podría hacer:

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

Utilizando la nueva rspec 3 sintaxis:

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

definir un matcher personalizado que se encuentra el enlace y comprueba su atributo target es '_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 

Utilice have_link_open_in_new_window(locator, options) como utilizaría have_link(locator, options):

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