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