Tengo el siguiente archivo:
/spec/controllers/groups_controller_spec.rb
¿Qué comando en la terminal utilizo para ejecutar solo esa especificación y en qué directorio ejecuto el comando?
Mi archivo de gemas:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Archivo de especificaciones:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
ruby-on-rails
ruby
ruby-on-rails-3
rspec
Un aprendiz
fuente
fuente
bundle exec rspec spec --help
te daré la respuesta:Respuestas:
No estoy seguro de cuánto tiempo ha estado disponible, pero hay una configuración Rspec para ejecutar el filtrado, por lo que ahora puede agregar esto a su
spec_helper.rb
:Y luego agregue una etiqueta de enfoque al
it
,context
odescribe
para ejecutar solo ese bloque:Documentación de RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
fuente
rspec
comandos para ejecutar la especificación con el parámetro apropiado para indicar cuálUsualmente hago:
Donde
42
representa la línea de la prueba que quiero ejecutar.EDITAR1:
También puedes usar etiquetas. Ver aquí .
EDITAR 2:
Tratar:
fuente
rspec
error porque la versión en su sistema es más reciente que la de su archivo de gemas.Con rastrillo:
(El crédito va a esta respuesta . Ve a votarlo).
EDITAR (gracias a @cirosantilli): para ejecutar un escenario específico dentro de la especificación, debe proporcionar una coincidencia de patrón de expresiones regulares que coincida con la descripción.
fuente
SPEC=path/to/spec.rb:42
para ejecutar la prueba en el número de línea dado, aunque parece que cualquierit_behaves_like
prueba también se ejecutará (¿error?).Puede pasar una expresión regular al comando spec que solo ejecutará
it
bloques que coincidan con el nombre que proporcione.Actualización de 2019: Rspec2 cambió del comando 'spec' al comando 'rspec'.
fuente
do
tras unait
,context
odescribe
declaración.Hay muchas opciones:
fuente
Mi método preferido para ejecutar pruebas específicas es ligeramente diferente: agregué las líneas
A mi archivo spec_helper.
Ahora, cada vez que quiera ejecutar una prueba específica (o contexto, o especificación), simplemente puedo agregarle la etiqueta "foco" y ejecutar mi prueba de manera normal, solo se ejecutarán las pruebas enfocadas. Si elimino todas las etiquetas de enfoque, el
run_all_when_everything_filtered
activa y ejecuta todas las pruebas de forma normal.No es tan rápido y fácil como las opciones de la línea de comandos: requiere que edite el archivo para la prueba que desea ejecutar. Pero creo que te da mucho más control.
fuente
La respuesta de @apneadiving es una buena manera de resolver esto. Sin embargo, ahora tenemos un nuevo método en Rspec 3.3. Simplemente podemos ejecutar en
rspec spec/unit/baseball_spec.rb[#context:#it]
lugar de usar un número de línea. Tomado de aquí:Entonces, en lugar de hacer
rspec spec/unit/baseball_spec.rb:42
donde está (prueba en la línea 42) es la primera prueba, simplemente podemos hacerrspec spec/unit/baseball_spec.rb[1:1]
orspec spec/unit/baseball_spec.rb[1:1:1]
dependiendo de qué tan anidado esté el caso de prueba.fuente
En los carriles 5,
Utilicé esta manera para ejecutar un solo archivo de prueba (todas las pruebas en un archivo)
El nombre de la clase se puede usar para que coincida con el archivo deseado
TopicsControllerTest
Mi clase
class TopicsControllerTest < ActionDispatch::IntegrationTest
Salida:
Si lo desea, puede ajustar la expresión regular para que coincida con el método de prueba único
\TopicsControllerTest#test_Should_delete\
fuente
Para el modelo, solo se ejecutará el caso en la línea número 5
Para el controlador: solo se ejecutará el caso en la línea número 5
Para el modelo de señal o controlador, elimine el número de línea de arriba
Para ejecutar case en todos los modelos
Para ejecutar case en todos los controladores
Para ejecutar todos los casos
fuente
Ejecute los comandos desde el directorio raíz de su proyecto:
fuente
comenzando con rspec 2 puede usar lo siguiente:
fuente
Dado que está en un proyecto de rails 3 con rspec 2, desde el directorio raíz de rails:
Definitivamente debería funcionar. me cansé de escribir eso, así que creé un alias para acortar 'bundle exec rspec' a 'bersp'
'bundle exec' es para cargar el entorno de gemas exacto especificado en su archivo de gemas: http://gembundler.com/
Rspec2 cambió del comando 'spec' al comando 'rspec'.
fuente
Utilizo esta gema de guardia para ejecutar automáticamente mi prueba. Ejecuta la prueba después de crear o actualizar operaciones en el archivo de prueba.
https://github.com/guard/guard-test
o por lo general puedes ejecutar usando el siguiente comando
rspec spec / controllers / groups_controller_spec.rb
fuente
Puedes hacer algo como esto:
fuente
Puedes usar
el número de línea debe ser el número de línea de las líneas 'describir' o 'it' para que ejecute las pruebas presentes en ese bloque en particular. en su lugar, ejecutará todas las líneas al lado de line_number.
También puede crear bloques con un nombre personalizado y luego puede ejecutar esos bloques solamente.
fuente
Otro error común es tener o haber actualizado una aplicación Rails anterior a Rails 5+ y colocarla
require 'spec_helper'
en la parte superior de cada archivo de prueba. Esto debería cambiar arequire 'rails_helper'
. Si observa un comportamiento diferente entre la tarea de rastrillo (rake spec
) y cuando ejecuta una sola especificación (rspec path/to/spec.rb
), esta es una razón comúnla mejor solución es
1) asegúrese de estar usando
require 'rails_helper'
en la parte superior de cada uno de sus archivos de especificaciones, no el estilo anteriorrequire 'spec_helper'
2) use larake spec SPEC=path/to/spec.rb
sintaxisrspec path/to/spec.rb
Creo que el estilo antiguo debería considerarse fuera de moda por la comunidad en este momento en 2020 (pero, por supuesto, lo hará funcionar, dejando de lado otras consideraciones)fuente