2012-04-22 9 views
8

Estoy usando capibara en lugar de webrat en rieles. He instalado el capibara y uso gem 'capybara' en Gemfile. cuando usocss esperado "título" con texto en capybara

page.should have_selector("title", :text => "anything title") 

es dar un error

Failure/Error: page.should have_selector("title", :text => "anything title") 
expected css "title" with text "anything title" to return something 

archivo de prueba es la siguiente:

require 'spec_helper' 

describe "Test pages" do 
    describe "Home page" do  
    it "should have the content 'Demo App'" do 
    visit '/test_pages/home'  
    page.should have_selector("title", :text => "anything title")    
    end 
end 
end 
+1

¿Has probado 'save_and_open_page' justo antes de tu afirmación de prueba para ver lo que Capybara cree que está viendo? – nmott

Respuesta

12
No

seguro de la versión de las gemas que está utilizando, pero me encontré con un caso similar donde using: el texto falló pero cuando utilicé: content, pasó la prueba. Estoy usando Rails 3.2.3, rspec-rails 2.9.0, capybara 1.1.2 y gemas de therubyracer en Ubuntu Lucid Lynx.

intentar sustituir

page.should have_selector("title", :text => "anything title") 

con

page.should have_selector("title", :content => "anything title") 
+0

¡Oye! Estoy usando gem 'rails', '3.2.3', gem 'rspec-rails', '2.9.0', y también gem 'capybara', '1.1.2' en Ubuntu y también en windows. He usado: contenido y está funcionando bien! Gracias. – vajapravin

+0

Me alegro de que funcionó, pero desde entonces he recibido: texto a trabajar y de acuerdo con la documentación que se utiliza: el texto es la forma correcta de hacerlo. Tenía un fantasma en la máquina ya que no puedo recrear el problema. Ver [rubydoc: Capybara :: RSpecMatchers # have_selector] (http://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers#have_selector-instance_method) – rbnewb

+0

Tengo el mismo problema. Por alguna razón, solo en el elemento de título, ': content' funciona pero': text' no ... es raro. –

1

Tengo un problema similar, sólo para hacerle saber, el uso de: el contenido no está soportada en capibara, que debe ser: texto.

El problema con: contenido es que no es reconocido por Capybara y luego se ignora y se muestra como APROBADO, pero este es un comportamiento incorrecto.

Si usa Capybara, cambie cada: contenido a: texto para ver si la prueba realmente pasa, quizás haya errores no notados.

4

El problema aquí es que los navegadores tratan las etiquetas <title> como invisibles. (Gracias DreadPirateShawn para vincular al issue sobre este tema).

No hay manera 'limpia' para obtener el título, pero con un poco de un truco que todavía se puede probar el valor del título de la siguiente manera:

first('head title').native.text.should == "WhateverYourTitleNeedsToBe" 

no utilice el símbolo :content porque en mayores las versiones de las etiquetas inválidas de Capybara se ignorarían y parecería que su prueba ha pasado. La versión más reciente le dará un bonito mensaje de error como:

ArgumentError: invalid keys :content, should be one of :text, :visible, :between, :count, :maximum, :minimum

+0

Creo que la forma más limpia obtener el título es usar xpath. De esta manera: 'page.find: xpath, '// title', visible: false' – etagwerker

0

Encontré los mismos problemas. Empíricamente la siguiente es lo que encontré:

page.should have_selector("title", :text => "AnyTitle") 

se espera que su salida HTML que contienen un identificador de la siguiente manera:

<title text="AnyTitle"/> 

Sin embargo, si se utiliza: contenido en lugar de: el texto de la siguiente manera

page.should have_selector("title", :content => "AnyTitle") 

entonces se espera que su salida hTML que contienen un identificador de la siguiente manera

<title>AnyTitle</title> 

Por lo tanto, si la representación html resultante contiene la etiqueta <title text="AnyTitle"/>, debe usar: texto ; de lo contrario, si la representación html resultante contiene la etiqueta <title>AnyTitle</title>, es posible que desee utilizar: contenido en su lugar.

P.S. mis entornos de la gema: capibara-2.0.2, carriles-3.2.12, rspec-carriles-2.12.2, webrat-0.7.3 si quite webrat, entonces el ": conetnt" palabra clave no es reconocido por Carpincho solo.

Pero el camino limpio para solucionarlo es: deshacerse de webrat e instalar un establo Carpincho-1.1.2, es decir en el Gemfile

#gem webrat 
gem 'capybara', '1.1.2' 

por favor refiérase a prusswan's answer

0

Just do esto:

expect(page).to have_title("some title")