test rails ruby-on-rails rspec ruby-on-rails-3.1 rspec-rails rails-engines

ruby on rails - Testing Rails 3.1 motor montable con Rspec



rspec documentation (2)

Estaba buscando la misma respuesta y encontré la gema de combustión * que promete configurar un entorno completo para especificar su motor de una manera más simple. Solo agrega

gem.add_development_dependency ''combustion'', ''~> 0.3.1''

a su gemspec y ejecutar

bundle exec combust

para reproducir una aplicación de rieles completos en su directorio de especificaciones.

* No lo he intentado todavía ...

Empecé a hacer un motor Rails 3.1, y estoy teniendo dificultades para probarlo usando rspec.

En primer lugar, si ejecuto rails g integration_test whatever que crea una prueba de integración regular en pruebas / integración en lugar de especificaciones / solicitudes (la gema rspec-rails está instalada y es necesaria como una dependencia de desarrollo en el archivo gemspec)

Además, cuando ejecuto una prueba de especificación, aparece un error que dice que la tabla correspondiente al modelo que estoy probando no se ha creado. Intenté rake engine_name:install:migrations y ejecutar rake db:migrate desde el interior de la aplicación ficticia, y rake engine_name:install:migrations error "la tabla ya existe".

Todo parece desconectado, siento que me falta algo aquí para hacer que la gema rspec funcione sin problemas, como suele ocurrir con las aplicaciones de rieles completos.

Seguí todos los cambios desde aquí http://rubyx.com/2011/03/01/start-your-engines y puedo probar el motor manualmente al iniciar la aplicación ficticia a través de la consola, como se muestra aquí http://railscasts.com/episodes/277-mountable-engines .

¿Hay alguna manera de hacer que rspec sea el predeterminado para probar un motor Rails 3.1?


Estoy usando RSpec con un motor Rails sin problemas.

Creé mi complemento utilizando los siguientes modificadores: -T --full --dummy-path = spec / dummy.

  • -T excluye prueba / unidad
  • --full indica que el complemento es un motor
  • --dummy-path es simplemente para que no obtengamos un directorio de prueba (el valor predeterminado es test / dummy).

A partir de ahí, utilicé el spec_helper del artículo "start your engines":

# Configure Rails Envinronment ENV["RAILS_ENV"] = "test" require File.expand_path("../dummy/config/environment.rb", __FILE__) require ''rspec/rails'' ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), ''../'') # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f } RSpec.configure do |config| config.use_transactional_fixtures = true end

Para los generadores Agrego un bloque de config.generators a mi archivo engine.rb así:

module MyEngine class Engine < Rails::Engine config.generators do |g| g.test_framework :rspec, :view_specs => false end end end

Con eso, puedo obtener pruebas de rspec cuando ejecuto un generador como el generador de modelos.

En cuanto a la base de datos, ¿su archivo database.yml está configurado correctamente? ¿Cargó el entorno de prueba, por ejemplo, rake db:test:clone or rake db:migrate RAILS_ENV=test ? Supongo que RSpec no puede ver sus tablas porque no hay una base de datos de prueba configurada.