ruby - rails - rspec let
Hacer que SimpleCov funcione cuando se ejecuta gema binaria (1)
bueno, no es fácil encontrar una solución a este problema en particular.
no estoy seguro de que esto resuelva tu problema, pero ¿quizás un comienzo?
sin el bloque de inicio que modifica los filtros, no pude hacer que SimpleCov mirara el directorio bin (usando el repositorio github de muestra que me proporcionó).
Use command_name para dar un nombre a los informes de cobertura de los procesos principales y luego en la horquilla utilizada command_name para dar a los procesos bifurcados un nombre (SimpleCov los fusiona para nosotros siempre que tengan nombres diferentes).
luego usé load para cargar el archivo bin en lugar de usar el sistema .
(No pude encontrar una manera de hacer que el sistema o el spawn se agreguen a los informes de cobertura, tal vez si lo llamó a través de un script que reinicia SimpleCov con un nombre de comando alternativo)
nuevamente, no estoy seguro si esto es exactamente lo que está buscando pero puede ser un comienzo. código a continuación:
# spec_helper.rb
require ''simplecov''
SimpleCov.command_name "main_report"
SimpleCov.start do
filters.clear # This will remove the :root_filter and :bundler_filter that come via simplecov''s defaults
add_filter do |src|
!(src.filename =~ /^#{SimpleCov.root}/) unless src.filename =~ /bin/ #make sure the bin directory is allowed
end
end
require ''rubygems''
require ''bundler''
Bundler.require :default, :development
# test_spec.rb
require ''spec_helper''
describe "my bin" do
it "should be covered" do
pid = Process.fork do
SimpleCov.start do
command_name "bin_report_section"
end
load "bin/runme"
end
end
end
resultado:
Informe de cobertura generado para bin_report_section, main_report a / home / korreyd / simplecov-debug / coverage. 1/1 LOC (100.0%) cubierto.
Estoy tratando de agregar cobertura SimpleCov a mi gema que tiene un binario.
Me gustaría probar su interfaz de línea de comandos, por lo que deseo probar la ejecución binaria en sí, y no la biblioteca que utiliza.
No recibo ningún informe de cobertura (0 LOC) por SimpleCov.
Según tengo entendido, el problema probablemente se deba al hecho de que en mi prueba (ya sean características de pepino o especificaciones de rspec), estoy ejecutando el binario de la gema con system
o popen3
, pero no sé cómo puedo decirle a SimpleCov que lo haga " seguir "(o si estoy ladrando en el árbol correcto ...).
He intentado jugar con SimpleCov.command_name
, SimpleCov.pid = $$
, SimpleCov.track_files
y casi cualquier otra configuración remotamente relacionada que encontré.
No deseo utilizar Aruba, aunque he intentado revisar su fuente para buscar posibles respuestas.
Recortes de código relacionados:
# spec_helper.rb
require ''simplecov''
SimpleCov.start
require ''rubygems''
require ''bundler''
Bundler.require :default, :development
# test_spec.rb
require ''spec_helper''
describe "my bin" do
it "should be covered" do
system ''bin/runme''
end
end
He preparado un repositorio mínimo como un terreno de prueba fácil, si eso ayuda en absoluto.