Soy bastante novato tester, pero han estado tratando de llegar mejor a TDD en Rails.

RSpec de las grandes obras, pero mis pruebas son bastante lentos. He oído que MiniTest es mucho más rápido, y el MiniTest/Especificaciones DSL se ve bastante similar a como estoy acostumbrado a trabajar con RSpec, así que pensé en darle una oportunidad.

Sin embargo, no he sido capaz de encontrar nada en la web que proporciona un tutorial de cómo configurar y ejecutar Minitest. Aprendí a prueba de RSpec libro, y no tengo idea de cómo Test::Unit o MiniTest se supone que funciona. Tengo la gema en mi ejemplo, he escrito un par de pruebas sencillas, pero no tengo idea de qué hacer con ellos o cómo ejecutarlas. Me imagino que esta es una de esas cosas que es tan obvio que nadie se ha molestado en escribirlo…

¿Alguien puede explicarme cómo configurar algunos algunos Minitest/spec archivos y hacerlos correr, así que se puede comparar el rendimiento con Rspec?

EDITAR

Específicamente estos son los conceptos básicos que más necesita saber:

  1. ¿Necesita un test_helper archivo (como spec_helper) y si es así ¿cómo se puede crear?
  2. ¿Cómo ejecutar minitest? No parece ser un equivalente a rspec spec o rspec path/to/file_spec.rb, ¿qué me estoy perdiendo?

Gracias!

  • Un punto de partida: metaskills.net/2011/03/26/using-minitest-spec-with-rails
  • Kain, gracias. He visto este post… por desgracia no cubre el paso más básico: ¿necesita un test_helper archivo (como spec_helper) y si es así ¿cómo se puede crear? Y, cómo hacer ejecutar minitest? No parece ser un equivalente a rspec spec o rspec path/to/file_spec.rb. QUE es lo que realmente estoy atascado en.
  • Para lo que vale … esta pregunta se ha vuelto un par de opiniones y una de las favoritas, pero no upvotes. Ahora está perdido en la selva, si desea ver esta pregunta contestada por favor upvote por lo que se pone de nuevo delante de la gente.
  • Mire por favor blog.rawonrails.com/2012/01/… Este post es acerca de cómo utilizar bifurcada versión de minitest-gema rails para obtener minitest funciona mejor con los rieles.
  • ver esto de MANERA posterior a la stackoverflow.com/questions/10694355/…
InformationsquelleAutor Andrew | 2011-07-16

7 Comentarios

  1. 40

    Esta pregunta es similar a Cómo ejecutar todas las pruebas con minitest?

    Usando Ruby 1.9.3 y el Rastrillo 0.9.2.2, dada una estructura de directorios similar a esto:

    Rakefile
    lib/alpha.rb
    spec/alpha_spec.rb

    Aquí es lo que alpha_spec.rb aspecto:

    require 'minitest/spec'
    require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)
    
    require 'alpha'
    
    describe 'Alpha' do
      it 'greets you by name' do
        Alpha.new.greet('Alice').must_equal('hello, Alice')
      end
    end

    Y aquí Rakefile

    require 'rake'
    require 'rake/testtask'
    
    Rake::TestTask.new do |t|
      t.pattern = 'spec/**/*_spec.rb'
    end

    Puede ejecutar

    • todas las pruebas: rake test
    • una prueba: ruby -Ilib spec/alpha_spec.rb

    No sé si el uso de un spec_helper.rb con minitest es común o no. No parece ser una conveniencia método para cargar uno. Agregue esto a la Rakefile:

    require 'rake'
    require 'rake/testtask'
    
    Rake::TestTask.new do |t|
      t.pattern = 'spec/**/*_spec.rb'
      t.libs.push 'spec'
    end

    Luego spec/spec_helper.rb puede contener varios redundante cosas:

    require 'minitest/spec'
    require 'minitest/autorun'
    require 'alpha'

    Y spec/alpha_spec.rb reemplaza los componentes redundantes con:

    require 'spec_helper'
    • todas las pruebas: rake test
    • una prueba: ruby -Ilib -Ispec spec/alpha_spec.rb
    • Muy útil y muy completo, gracias Patrick!
  2. 4

    Qué versión de Ruby estás usando?

    A mi entender, el 1.9 introducido MiniTest, que sustituye a Test::Unit completo, con una compatible con la API. Así que si usted está en 1.9 y su aplicación Rails referencias Test::Unit, de hecho ya uso de MiniTest.

    Echar un vistazo a su Ruby fuente – test/unit.rb para 1.9.2 tiene las siguientes requiere:

    require 'minitest/unit'
    require 'test/unit/assertions'
    require 'test/unit/testcase'

    Y test/unit/assertions incluye MiniTest::Assertions.


    Conseguir tus pruebas para que se ejecute más rápido es un conjunto de otros oscuros art. Echa un vistazo a spork y watchr. El ex mantiene su aplicación inicializa, se vuelven a cargar los archivos modificados, y las horquillas antes de cada ejecución del conjunto de pruebas. El último de los relojes de los archivos en su repo para los cambios, y se ejecuta automáticamente asociados a los casos de prueba.

    Juntos dan un ojo de la media de TDD de instalación. Escribe un caso de prueba para el nuevo modelo, y se ejecutará de manera automática y se produce un error. Entonces, cada vez que guarde el modelo asociado, que testcase re-corre, muy rápidamente. Usted consigue cerca de retroalimentación instantánea sobre si está en rojo/verde.

    Ambos son un poco complicadas para ponerse en marcha y que se comportan muy bien juntos, así que revise de nuevo con algunas preguntas más si te quedas atascado.

    La mejor de las suertes!

  3. 4

    Nota que watchr o spork no son los requisitos para la ejecución de pruebas. Son una conveniencia para hacer la prueba. Pero la forma más básica puede ejecutar un conjunto de MiniTest pruebas con ruby sí mismo:

    $ ruby myfileoftests.rb
  4. 1

    Las versiones más recientes de RSpec (desde 2.8 lanzado en enero de 2012) tener un dramático aumento de la velocidad. Aquí es una exploración de las diferencias de rendimiento y una comparación con MiniTest.

    También, he encontrado este screencast por Ryan Bates una excelente introducción a la MiniTest. Tenga en cuenta que este es uno de los pro vídeos y tendrá que suscribirse a ver.

  5. 1

    Aquí está toda mi rakefile, la que puse en mi top directorio:

    task :default => :test
    task :test do
      Dir.glob('./test/*_test.rb').each { |file| require file}
    end

    Para ejecutar todos mis Minitest archivos a la vez, yo solo tipo de rake. Eso es todo!

    Asegúrese de tener require 'minitest/autorun' en la parte superior de cada uno de sus Minitest archivos. Dir.glob definitivamente NO funciona con Minitest.

    Para obtener bonito, de color Minitest de salida, con los nombres de todos mis métodos de prueba, tengo el archivo minitest_helper.rb en mi /directorio de prueba. (Tuve que instalar la gema minitest-reporteros):

    require 'minitest/reporters'
    Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
    require 'minitest/autorun'

    Yo sólo tenía que require_relative './minitest_helper' en la parte superior de cada uno de mis archivos de prueba.

  6. 0

    Patrick escribió una muy buena explicación y ejemplo. Para los lectores futuros acaba de ser conscientes de que las expectativas se han depreciado, y será eliminado en Minitest 6. Se requiere de un casi trivial cambio en envolver la cosa se está probando en una llamada a expect.

    require 'minitest/spec'
    require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)
    
    require 'alpha'
    
    describe 'Alpha' do
      it 'greets you by name' do
        expect(Alpha.new.greet('Alice')).must_equal('hello, Alice')
      end
    end

Dejar respuesta

Please enter your comment!
Please enter your name here