tests test_helper test rails how asserts ruby-on-rails unit-testing

ruby on rails - test_helper - Rails: ¿Cómo probar el código en el directorio lib/?



rspec (7)

A partir de Rails 4.0 :

rake test:all # Run all tests in any subdir of `test` without resetting the DB rake test:all:db # Same as above and resets the DB

A partir de Rails 4.1 , redefina la test:run para incluir tareas adicionales al ejecutar la rake test rake o rake test :

# lib/tasks/test.rake namespace :test do Rake::Task["run"].clear task run: ["test:units", "test:functionals", "test:generators", "test:integration", "test:tasks"] ["tasks"].each do |name| Rails::TestTask.new(name => "test:prepare") do |t| t.pattern = "test/#{name}/**/*_test.rb" end end end

Esto tiene la ventaja adicional de definir la rake test:tasks en el ejemplo dado.

A partir de Rails 4.2 , test:run incluye todos los subdires de test incluyéndolos al ejecutar la rake test , y así rake .

Tengo un modelo que obtiene sus datos de un objeto analizador. Estoy pensando que la clase de analizador debería vivir en el directorio lib / (aunque podría persuadirse de que debería vivir en otro lugar). La pregunta es: ¿dónde deberían estar las pruebas de mi unidad para la clase de analizador? ¿Y cómo me aseguro de que se ejecuten cada vez que ejecuto la prueba de rake?


Aquí hay una forma:

Crea lib/tasks/test_lib_dir.rake con lo siguiente

namespace :test do desc "Test lib source" Rake::TestTask.new(:lib) do |t| t.libs << "test" t.pattern = ''test/lib/**/*_test.rb'' t.verbose = true end end

Imita la estructura de tu directorio lib bajo el directorio de test , reemplazando el código lib con las pruebas correspondientes.

Ejecute la rake test:lib para ejecutar sus pruebas de lib.

Si desea que se ejecuten todas las pruebas al invocar la rake test , puede agregar lo siguiente a su nuevo archivo rake.

lib_task = Rake::Task["test:lib"] test_task = Rake::Task[:test] test_task.enhance { lib_task.invoke }


Para no definir tareas adicionales de rake para ejecutar pruebas desde las carpetas definidas personalizadas, también puede ejecutarlas con el comando rake test:all . La estructura de las carpetas de prueba para la carpeta lib o cualquier otra carpeta personalizada depende de usted. Pero prefiero duplicarlos en clases: lib se compara con test/lib , app/form_objects para test/form_objects .


Una manera fácil y limpia es simplemente crear un directorio bajo prueba / unidad / lib. A continuación, cree la prueba como test / unit / lib / foo_test.rb correspondiente a lib / foo.rb. No se requieren nuevas tareas de rake, y puede anidar más directorios si es necesario para que coincida con la estructura del directorio lib.


Utilizar:

[spring] rake test:all

ejecutar todas las pruebas, incluidos los directorios que ha creado (como [root]/test/lib/ ).

Omita [spring] si tou no lo está usando.


Yo estaba buscando hacer lo mismo pero con rspec & autospec y me costó un poco averiguar hasta dónde estaban obteniendo la lista de directorios / patrones de archivos que dictaba qué archivos de prueba ejecutar. Finalmente encontré esto en lib / tasks / rspec.rake: 86

[:models, :controllers, :views, :helpers, :lib, :integration].each do |sub| desc "Run the code examples in spec/#{sub}" Spec::Rake::SpecTask.new(sub => spec_prereq) do |t| t.spec_opts = [''--options'', "/"#{RAILS_ROOT}/spec/spec.opts/""] t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"] end end

Había colocado mis pruebas en un nuevo directorio spec / libs cuando el archivo rpsec.rake estaba configurado para buscar en spec / lib. Simplemente renombrar libs -> lib hizo el truco!


En la aplicación Rails en la que estoy trabajando, decidí simplemente colocar las pruebas en el directorio test/unit . También los anidaré por módulo / directorio también, por ejemplo:

lib/a.rb => test/unit/a_test.rb lib/b/c.rb => test/unit/b/c_test.rb

Para mí, este fue el camino de la última resistencia, ya que estas pruebas se ejecutaron sin tener que hacer ningún otro cambio.