tutorial rails rspec capybara

rspec - rails - capybara webkit



Probando el atributo de destino de un enlace con Capybara/RSpec (4)

Soy un poco nuevo en Rails / RSpec / Capybara, así que esta es probablemente una pregunta para principiantes, pero Google no me ayudó tanto como esperaba. Esperaba poder usar

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

para escribir una prueba para un enlace que debería abrirse en una nueva ventana, pero que no parece funcionar. También he intentado envolver el hash de opciones entre llaves:

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

La prueba siempre tendrá éxito, 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 de destino? Esperemos que no sea para usar una búsqueda XPath ...


Defina un emparejador personalizado que encuentre el enlace y verifique que 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

Use have_link_open_in_new_window(locator, options) como usaría have_link(locator, options) :

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


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

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


Podrías hacerlo:

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


Usando la nueva sintaxis de rspec 3:

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