ruby-on-rails - tests - ruby on rails test
¿Cómo ejecutar una sola prueba RSpec? (12)
En los carriles 5,
Utilicé esta manera para ejecutar un solo archivo de prueba (todas las pruebas en un archivo)
rails test -n /TopicsControllerTest/ -v
El nombre de la clase se puede usar para coincidir con el archivo deseado TopicsControllerTest
Mi clase class TopicsControllerTest < ActionDispatch::IntegrationTest
Salida:
Si lo desea, puede modificar la expresión regular para que coincida con el método de prueba único /TopicsControllerTest#test_Should_delete/
rails test -n /TopicsControllerTest#test_Should_delete/ -v
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
Con rastrillo:
rake spec SPEC=path/to/spec.rb
(El crédito va a esta respuesta . Ve a votarle).
EDITAR (gracias a @cirosantilli): para ejecutar un escenario específico dentro de la especificación, debe proporcionar un patrón de expresión regular que coincida con la descripción.
rake spec SPEC=path/to/spec.rb /
SPEC_OPTS="-e /"should be successful and return 3 items/""
Dado que estás en un proyecto de rails 3 con rspec 2, desde el directorio raíz de rails:
bundle exec rspec spec/controllers/groups_controller_spec.rb
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 que cargue el entorno de gema exacto especificado en su archivo de gema: http://gembundler.com/
Rspec2 cambió del comando ''spec'' al comando ''rspec''.
Hay muchas opciones:
rspec spec # All specs
rspec spec/models # All specs in the models directory
rspec spec/models/a_model_spec.rb # All specs in the some_model model spec
rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line ''nn''
rspec -e"text from a test" # Runs specs that match the text
rspec spec --tag focus # Runs specs that have :focus => true
rspec spec --tag focus:special # Run specs that have :focus => special
rspec spec --tag focus ~skip # Run tests except those with :focus => true
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 rspec spec/unit/baseball_spec.rb[#context:#it]
lugar de usar un número de línea. Tomado de here:
RSpec 3.3 introduce una nueva forma de identificar ejemplos [...]
Por ejemplo, este comando:
$ rspec spec/unit/baseball_spec.rb[1:2,1:4]
… ejecutaría el segundo y el cuarto ejemplo o grupo definido en el primer grupo de nivel superior definido en spec / unit / baseball_spec.rb.
Entonces, en lugar de hacer rspec spec/unit/baseball_spec.rb:42
donde (la prueba en la línea 42) es la primera prueba, simplemente podemos hacer rspec spec/unit/baseball_spec.rb[1:1]
o rspec spec/unit/baseball_spec.rb[1:1:1]
dependiendo de cuán anidado esté el caso de prueba.
Mi método preferido para ejecutar pruebas específicas es ligeramente diferente: agregué las líneas
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
Para mi archivo spec_helper.
Ahora, cuando quiera ejecutar una prueba específica (o contexto, o especificación), simplemente puedo agregarle la etiqueta "enfocar" y ejecutar mi prueba de la manera normal: solo se ejecutarán las pruebas enfocadas. Si run_all_when_everything_filtered
todas las etiquetas de enfoque, el run_all_when_everything_filtered
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 te da mucho más control, me parece.
Para el modelo, se ejecutará el caso en la línea número 5 solamente
bundle exec rspec spec/models/user_spec.rb:5
Para el controlador: se ejecutará el caso en la línea número 5 solamente
bundle exec rspec spec/controllers/users_controller_spec.rb:5
Para el modelo de señal o controlador, quite el número de línea de arriba
Para ejecutar caso en todos los modelos
bundle exec rspec spec/models
Para ejecutar caso en todos los controladores
bundle exec rspec spec/controllers
Para ejecutar todos los casos
bundle exec rspec
Por lo general hago:
rspec ./spec/controllers/groups_controller_spec.rb:42
Donde 42
representa la línea de la prueba que quiero ejecutar.
EDIT1:
También puedes usar etiquetas. Ver here
EDIT 2:
Tratar:
bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42
Puede pasar una expresión regular al comando de especificación que solo ejecutará los bloques que coincidan con el nombre que proporcionó.
spec path/to/my_spec.rb -e "should be the correct answer"
Puedes hacer algo como esto:
rspec/spec/features/controller/spec_file_name.rb
rspec/spec/features/controller_name.rb #run all the specs in this controller
Uso esta gema protectora para ejecutar automáticamente mi prueba. Ejecuta la prueba después de crear o actualizar las operaciones en el archivo de prueba.
https://github.com/guard/guard-test
o usualmente puedes correr usando el siguiente comando
rspec spec / controllers / groups_controller_spec.rb
comenzando con rspec 2 puedes usar lo siguiente:
# in spec/spec_helper.rb
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
# in spec/any_spec.rb
describe "something" do
it "does something", :focus => true do
# ....
end
end