tests run rails how example describe ruby rspec bdd

run - ruby capybara github



¿Desactivar un grupo de pruebas en rspec? (7)

Tengo una especificación de prueba que describes una clase y dentro de eso tiene varios contexts cada uno con varios bloques.

¿Hay alguna manera de desactivar un context temporalmente?

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

Esto es lo que 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 dije, simplemente pasó a ejecutar las pruebas debajo de la llamada pendiente.

La búsqueda me llevó a este hilo de la lista de correo 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 en lo que pienso cuando veo una llamada pending .

¿Hay una alternativa o lo estoy haciendo mal?


Mira lo que piensas de esto:

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

Me gustaría ver los motivos con mis elementos 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.

xit a pending o xit es rápido y fácil, pero prefiero la construcción 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.


Para deshabilitar un árbol de especificaciones con RSpec 3 , puede:

before { skip } # or xdescribe # or xcontext

Puede agregar un mensaje con omisión que aparecerá en el resultado:

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

con RSpec 2 :

before { pending }


Solo para explicar qué está pasando con tu 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) u skip (RSpec 3) en un bloque before .


Use filtros de exclusión . 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 tu 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 ejecuto "rspec ./spec/sample_spec.rb --format doc"

Entonces 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"


Use pendiente en lugar de describir. Si tu bloque es:

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

Puede omitir todo el bloque de la siguiente manera:

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


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

use xdescribe, xcontext, xit para deshabilitarlo.

Actualizar:

Desde rspec 2.11, incluye xit por defecto. entonces 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


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