37

Comencé a fabricar un motor Rails 3.1 y estoy teniendo dificultades para probarlo con rspec.Testing Rails 3.1 motor montable con Rspec

En primer lugar, si me quedo rails g integration_test whatever crea una prueba de integración regular en ensayos/integración en lugar de spec/solicitudes (el rspec-carriles joya está instalado y requiere 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 ejecuté rake db:migrate desde el interior de la aplicación ficticia, y aparece el 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.

He seguido 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 valor predeterminado para probar un motor Rails 3.1?

+0

En rieles 3.2 algo de esto se ha resuelto, pero siempre olvido cómo migrar la base de datos de prueba. Para ejecutar migraciones en la base de datos de prueba, ejecute 'rake app: db: test: prepare' en el directorio de su gema. – Andrew

+0

Acabo de implementar el método en este artículo sin problemas. http://viget.com/extend/rails-engine-testing-with-rspec-capybara-and-factorygirl – jspooner

Respuesta

62

Estoy usando RSpec con un motor Rails sin problemas.

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

  • -T excluye test/unit
  • --full indica que el plugin es un motor
  • --dummy-path es simplemente para que no obtenemos un directorio de prueba (el valor por defecto es prueba/ficticio).

A partir de ahí he utilizado la spec_helper del artículo de "enciendan sus motores":

# 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. Añado config.generators bloquean 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, soy capaz de obtener pruebas rspec cuando se ejecuta 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, p. rake db:test:clone o rake db:migrate RAILS_ENV=test? Supongo que RSpec no puede ver sus tablas porque no hay una base de datos de prueba configurada.

+1

¿No debería usar '--mountable' en lugar de' --full'? – deb

+0

Seguí los cambios en su respuesta, pero todavía no puedo usar el generador. si pruebo 'rails g integration_test posts' no pasa nada. ¿Quizás dejaste algo? – deb

+0

No uso el generador de prueba de integración, así que no estoy seguro. Solo pasar --full significa que es un motor estándar sin nombre de espacio y generará el proyecto ficticio. Estoy bastante seguro de que necesita pasar --full para un-- montable también para poder generar el proyecto ficticio, pero tal vez eso cambió desde el RC? ¿Qué sucede si haces un modelo de rieles g ... o un controlador? – dwhite

9

Estaba buscando la misma respuesta y encontré the combustion gem * que prometen configurar un entorno completo para especificar su motor de una manera más simple. Sólo tiene que añadir

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

a su gemspec y ejecutar

bundle exec combust 

para reproducir una aplicación de rieles completa en su directorio spec.

* No lo he probado aún ...

+0

Gracias por la referencia - rocas de combustión. –