2011-11-17 14 views
9

Estoy tratando de averiguar por qué una especificación muy simple de "¿tiene esta clave hash?" Que estoy escribiendo está fallando. Al entrar en mi rubí REPL Estoy tratando la siguiente ...RSpec 2.7 y hash should have_key

[3] pry(main)> a_hash = {:a=>"A"} 
=> {:a=>"A"} 
[4] pry(main)> a_hash.should have_key :a 
NoMethodError: undefined method `have_key' for main:Object 
from (pry):4:in `<main>' 
[5] pry(main)> a_hash.keys.length.should == 1 
=> true 
[8] pry(main)> a_hash.has_key? :a 
=> true 

La primera prueba es, obviamente, lo que quiero conseguir trabajo y la segunda prueba estoy corriendo sólo para comprobar que RSpec se carga en mi entorno REPL .

Respuesta

4

Necesita hacer esto dentro de un ejemplo de RSpec, no creo que pueda escribir ese tipo de código en ninguna parte.

describe "" do 
    it "has a key" do 
    ... 
    end 
end 
+0

Estoy de acuerdo, pero hay una joya que aún no he probado pero que parece prometedora. https://github.com/amatsuda/interactive_rspec – lucapette

+0

Originalmente escribí mis especificaciones en un archivo 'blah_spec.rb' envuelto en un bloque' des/it' y ruby ​​se quejó 'método no definido' have_key 'para # (NoMethodError) ' – cfeduke

+0

D'oh! En realidad, me faltaba el bloque 'it', lo estaba haciendo directamente en' describe' ... ¡y ahora funciona! – cfeduke

22

En realidad, puede tener replicadores RSpec fuera de los bloques "it". Solo necesita incluir RSpec :: Matchers.

[ ~/work/mobile_server (master)]$ irb 
>> require 'rspec' 
true 
>> include RSpec::Matchers 
Object < BasicObject 
>> {a: 1}.should have_key(:a) 
true 
+0

Creo que esta es definitivamente la mejor respuesta/más informativa. Gracias por la información @Costi. –

+0

En RSpec 3 debe escribir "expect ({a: 1}). To have_key (: a)" – Evmorov