should que aprender ruby rspec

que - Ejecutar Rspec desde Ruby



que es rspec (3)

Creo que la mejor manera sería usar la configuración de RSpec y el formateador. Esto no implicaría analizar la secuencia de IO, también ofrece una personalización de resultados mucho más rica mediante programación.

RSpec 2:

require ''rspec'' config = RSpec.configuration # optionally set the console output to colourful # equivalent to set --color in .rspec file config.color = true # using the output to create a formatter # documentation formatter is one of the default rspec formatter options json_formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output) # set up the reporter with this formatter reporter = RSpec::Core::Reporter.new(json_formatter) config.instance_variable_set(:@reporter, reporter) # run the test with rspec runner # ''my_spec.rb'' is the location of the spec file RSpec::Core::Runner.run([''my_spec.rb''])

Ahora puede usar el objeto json_formatter para obtener el resultado y el resumen de una prueba de especificaciones.

# gets an array of examples executed in this test run json_formatter.output_hash

Un ejemplo de valor de output_hash se puede encontrar here :

RSpec 3

require ''rspec'' require ''rspec/core/formatters/json_formatter'' config = RSpec.configuration formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output_stream) # create reporter with json formatter reporter = RSpec::Core::Reporter.new(config) config.instance_variable_set(:@reporter, reporter) # internal hack # api may not be stable, make sure lock down Rspec version loader = config.send(:formatter_loader) notifications = loader.send(:notifications_for, RSpec::Core::Formatters::JsonFormatter) reporter.register_listener(formatter, *notifications) RSpec::Core::Runner.run([''spec.rb'']) # here''s your json hash p formatter.output_hash

Otros recursos

Estoy tratando de ejecutar rspec desde ruby, y obtengo el estado o la cantidad de fallas de un método o algo así. En realidad estoy corriendo algo como esto:

system("rspec ''myfilepath''")

pero solo puedo obtener la cadena devuelta por la función. ¿Hay alguna manera de hacerlo directamente utilizando objetos?


Le sugiero que eche un vistazo al código fuente de rspec para encontrar la respuesta. Creo que puedes empezar con example_group_runner

Edit : Ok, aquí está el camino:

RSpec::Core::Runner::run(options, err, out)

Opciones - matriz de directorios, err y out - streams. Por ejemplo

RSpec::Core::Runner.run([''spec'', ''another_specs''], $stderr, $stdout)


Su problema es que está utilizando el método del Kernel#system para ejecutar su comando, que solo devuelve verdadero o falso en función de si puede encontrar el comando y ejecutarlo con éxito. En su lugar, desea capturar la salida del comando rspec . Esencialmente desea capturar todo lo que rspec genera en STDOUT. Luego puede iterar a través de la salida para encontrar y analizar la línea que le indicará cuántos ejemplos se ejecutaron y cuántos fallos hubo.

Algo a lo largo de las siguientes líneas:

require ''open3'' stdin, stdout, stderr = Open3.popen3(''rspec spec/models/my_crazy_spec.rb'') total_examples = 0 total_failures = 0 stdout.readlines.each do |line| if line =~ /(/d*) examples, (/d*) failures/ total_examples = $1 total_failures = $2 end end puts total_examples puts total_failures

Esto debería generar la cantidad de ejemplos totales y la cantidad de fallas, adaptarse según sea necesario.