Diferencia entre un bloque de ti y un bloque específico en RSpec


83

¿Cuál es la diferencia entre un bloque de ti y un bloque específico en RSpec?

subject { MovieList.add_new(10) }

specify { subject.should have(10).items }
it { subject.track_number.should == 10}

Parecen hacer el mismo trabajo. Solo comprobando para estar seguro.

Respuestas:


110

Los métodos son los mismos ; se proporcionan para que las especificaciones se lean mejor en inglés según el cuerpo de la prueba. Considere estos dos:

describe Array do
  describe "with 3 items" do
    before { @arr = [1, 2, 3] }

    specify { @arr.should_not be_empty }
    specify { @arr.count.should eq(3) }
  end
end

describe Array do
  describe "with 3 items" do
    subject { [1, 2, 3] }

    it { should_not be_empty }
    its(:count) { should eq(3) }
  end
end

9
Tienes razón, Brandon, ity specifyson métodos idénticos. Puede ver dónde están definidos aquí en la fuente .
Jordan Running

1
¡Excelente captura! Increíble lo que puedes encontrar leyendo la fuente. :) Actualizaré la respuesta.
Michelle Tilley

2
Aquí es una esencia con los nombres de los métodos ejemplos a diciembre de 2013: gist.github.com/Dorian/7893586 (ejemplo, que, especificó, el enfoque, ...)
Dorian

4
mejor rspec desaconsejar el uso de should, y a favor deexpect
fotanus

4
ACTUALIZAR el excelente enlace de @Jordan: github.com/rspec/rspec-core/blob/master/lib/rspec/core/… es ahora el lugar donde encontrarlo.
Florian Eck
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.