2011-05-07 8 views
85

Tengo una especificación de prueba que describes una clase y dentro de eso tiene varios contexts cada uno con varios bloques it.¿Deshabilitar un grupo de pruebas en rspec?

¿Hay alguna manera de desactivar un context temporalmente?

Intenté agregar una llamada pending "temporarily disabled" en la parte superior dentro de un context Quiero deshabilitar, y vi algo sobre pendiente cuando ejecuté la especificación, pero luego continuó ejecutando el resto de las pruebas.

Esto es lo que de alguna manera tenía:

describe Something 
    context "some tests" do 
    it "should blah" do 
     true 
    end 
    end 

    context "some other tests" do 
    pending "temporarily disabled" 

    it "should do something destructive" do 
     blah 
    end 
    end 
end 

pero como he dicho que sólo iba a ejecutar las pruebas debajo de la llamada en espera.

Buscando me llevó a este mailing list thread en el que el creador (?) De rspec dice que es posible en rspec 2, que estoy ejecutando. Supongo que funcionó, pero no tuvo el efecto deseado de deshabilitar todas las pruebas siguientes, que es lo que pienso cuando veo una llamada pending.

¿Existe una alternativa o lo estoy haciendo mal?

Respuesta

132

Para desactivar un árbol de especificaciones usando RSpec 3 puede:

before { skip } 
# or 
xdescribe 
# or 
xcontext 

Se puede añadir un mensaje con salto que aparecerá en la salida:

before { skip("Awaiting a fix in the gem") } 

con RSpec 2:

before { pending } 
+0

¿Cómo se puede hacer exactamente eso en un bloque que tiene: '' 'describe 'XXXXX' do .... final''' –

+2

@ p.matsinopoulos Simplemente agrégalo a la línea siguiente' describe 'XXXXX' do '. Funcionó como un encanto, gracias @Pyro! – chesterbr

+0

Solución más simple que los filtros, +1 – dolzenko

41

Utilice exclusion filters. Desde esa página: En su spec_helper.rb (o rails_helper.rb)

RSpec.configure do |c| 
    c.filter_run_excluding :broken => true 
end 

En su prueba:

describe "group 1", :broken => true do 
    it "group 1 example 1" do 
    end 

    it "group 1 example 2" do 
    end 
end 

describe "group 2" do 
    it "group 2 example 1" do 
    end 
end 

cuando corro "./spec/sample_spec.rb rspec --format doc"

Luego la salida debe contener "grupo 2 ejemplo 1"

Y la salida no debe contener "grupo 1 ejemplo 1"

Y la salida no debe contener "grupo 1 Ejemplo 2"

+0

esto funcionó gracias –

8

otro. https://gist.github.com/1300152

utilice xdescribe, xcontext, xit para deshabilitarlo.

Actualización:

Desde rspec 2.11, que incluye Salir por defecto.por lo que el nuevo código será

# put into spec_helper.rb 
module RSpec 
    module Core 
    module DSL 
     def xdescribe(*args, &blk) 
     describe *args do 
      pending 
     end 
     end 

     alias xcontext xdescribe 
    end 
    end 
end 

Uso

# a_spec.rb 
xdescribe "padding" do 
    it "returns true" do 
    1.should == 1 
    end 
end 
+3

xdescribe no funciona – Chris

+0

actualizado. prueba el nuevo código – GutenYe

+0

¡Funciona! ¡Gracias! –

3

Uso pendientes en lugar de describir. Si el bloque es:

context "some other tests" do 
    it "should do something destructive" do 
    blah 
    end 
end 

Puede omitir todo el bloque por:

pending "some other tests" do 
    it "should do something destructive" do 
    blah 
    end 
end 
+1

Esto no funciona para rspec 2.13.0 –

1
describe "GET /blah" do 

    before(:each) { pending "Feature to be implemented..." } 

    it { expect(page).to have_button("Submit") } 
    it { expect(page).to have_content("Blah") } 
end 
15

ver lo que piensa de esto:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do 
    it "does something well" 
    it "rejects invalid input" 
end 

me gusta ver razones con mis artículos pendientes cuando estoy desactivando algo por "un tiempo". Sirven como pequeños comentarios/TODOs que se presentan regularmente en lugar de enterrarse en un comentario o un ejemplo/archivo excluido.

Cambiar it a pending o xit es rápido y fácil, pero prefiero la estructura hash. Le da documentación de cada ejecución, es un complemento (no cambia la descripción/contexto/así que tengo que decidir qué usar de nuevo más adelante), y se elimina tan fácilmente si se toma la decisión o se elimina el bloqueador .

Esto funciona igual para grupos y ejemplos individuales.

+0

Además, no estoy seguro de si funciona igual para describir, pero en el estado pendiente realmente se ejecuta la prueba, y falla si la prueba comienza a pasar. El xdescribe (supongo que como xit) - simplemente no lo ejecuta. –

0

Solo para explicar lo que está pasando con su código. Incluyéndolo donde lo tiene, simplemente se evalúa (y, por lo tanto, se ejecuta) cuando el archivo se carga durante el inicio. Sin embargo, necesita que se ejecute cuando se ejecutan las pruebas. Es por eso que las respuestas han sugerido poner pending (RSpec 2) o skip (RSpec 3) en un bloque before.

Cuestiones relacionadas