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.