Es bastante fácil con el generador adicional de rspec-rails configurar RSpec para probar una aplicación Rails. Pero, ¿qué hay de agregar RSpec para probar una gema en desarrollo? No estoy usando joyero o tales herramientas. Acabo de usar Bundler ( bundle gem my_gem
) para configurar la estructura de la nueva gema y editar manualmente * .gemspec. También agregué s.add_development_dependency "rspec", ">= 2.0.0"
a gemspec e hice un bundle install
.
¿Hay algún tutorial agradable que hacer a continuación para que RSpec funcione?
Respuestas:
He actualizado esta respuesta para que coincida con las mejores prácticas actuales:
Bundler apoya el desarrollo de gemas perfectamente. Si está creando una gema, lo único que necesita tener en su Gemfile es lo siguiente:
Esto le dice a Bundler que busque dentro de su archivo gemspec las dependencias cuando ejecuta
bundle install
.A continuación, asegúrese de que RSpec sea una dependencia de desarrollo de su gema. Edite el gemspec para que se lea:
A continuación, cree
spec/spec_helper.rb
y agregue algo como:Las primeras dos líneas le dicen a Bundler que cargue solo las gemas dentro de su gemspec. Cuando instala su propia gema en su propia máquina, esto obligará a sus especificaciones a usar su código actual, no la versión que ha instalado por separado.
Cree una especificación, por ejemplo
spec/foobar_spec.rb
:Opcional: agregue un
.rspec
archivo para las opciones predeterminadas y póngalo en la ruta raíz de su gema:Finalmente: ejecuta las especificaciones:
fuente
rspec --init
rspec --init
no estaba disponible cuando escribí esto, ¡pero buen punto!¡La solución de Iain anterior funciona muy bien!
Si también quieres un Rakefile, esto es todo lo que necesitas:
Consulte el RDoc para RakeTask para ver varias opciones que opcionalmente puede pasar a la definición de tarea.
fuente
Puedes generar tu nueva gema con rspec ejecutando
bundler gem --test=rspec my_gem
. ¡Sin configuración adicional!Siempre me olvido de esto. Se implementa aquí: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
fuente
--test=rspec
, pero todavía me preguntó si quería usar Rspec cuando corríbundler gem my_gem
.Aquí hay una manera barata y fácil (aunque no se recomienda oficialmente):
Haga un directorio en la raíz de su gema llamado
spec
, ponga sus especificaciones allí. Probablemente ya tenga instalado rspec, pero si no lo tiene, simplemente haga unagem install rspec
y olvide Gemfiles y bundler.A continuación, hará una especificación y deberá decirle dónde está su aplicación, dónde están sus archivos e incluir el archivo que desea probar (junto con las dependencias que tenga):
Abra la Terminal y ejecute rspec:
Si quieres algunas
.rspec
opciones amorosas, ve a hacer un.rspec
archivo y colócalo en la ruta raíz de tu gema. El mío se ve así:¡Fácil, rápido, ordenado!
Me gusta esto porque no tiene que agregar ninguna dependencia a su proyecto en absoluto, y todo sigue siendo muy rápido.
bundle exec
ralentiza un poco las cosas, que es lo que tendría que hacer para asegurarse de que usa la misma versión de rspec todo el tiempo. Los 0,56 segundos que tardó en ejecutar dos pruebas estaban ocupados en un 99% cuando mi computadora tardó en cargar rspec. Ejecutar cientos de especificaciones debería ser extremadamente rápido. El único problema con el que podría toparse es que si cambia las versiones de rspec y la nueva versión no es compatible con alguna de las funciones que utilizó en su prueba, es posible que deba volver a escribir algunas pruebas.Esto es bueno si está haciendo especificaciones únicas o tiene alguna buena razón para NO incluir rspec en su gemspec, sin embargo, no es muy bueno para permitir compartir o hacer cumplir la compatibilidad.
fuente
Thing = AwesomeGem::Awesome
o puede hacer la prueba dentro de un módulo, comomodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end