2010-12-07 21 views
19

pido disculpas si esta pregunta es un poco subjetivo ... Estoy tratando de averiguar la mejor manera de probar Rails 3 motores con pepino & Rspec. Para probar el motor, es necesaria una aplicación de rails 3. Aquí es lo que estoy haciendo actualmente:¿Cómo probar Rails 3 Engines with Cucumber & Rspec?

  1. Agregar una aplicación de prueba de raíles a la raíz de la gema (myengine) ejecutando: rails new /myengine/rails_app

  2. Añadir pepino a /myengine/rails_app/features como lo haría en una aplicación Rails normales

  3. Requerir de los rieles del motor Gem (usando :path=>"/myengine") en /myengine/rails_app/Gemfile

  4. Añadir especificación en el directorio raíz de la gema: /myengine/spec

  5. Incluir los accesorios en /myengine/spec/fixtures y añadir lo siguiente a mi env.rb cuc:

env.rb:

Fixtures.reset_cache 
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures') 
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') } 
Fixtures.create_fixtures(fixtures_folder, fixtures) 

¿Ves algún problema con su puesta en marcha ¿Me gusta esto? Las pruebas funcionan bien, pero estoy un poco indeciso para poner las funciones dentro de la aplicación de raíles de prueba. Originalmente intenté poner las características en la raíz de la gema y creé la aplicación de rieles de prueba dentro de features/support, pero por alguna razón mi motor no se inicializó cuando realicé las pruebas, aunque pude ver que la aplicación cargaba todo lo demás cuando cuc corría .

Si alguien está trabajando con los carriles de Motores y está utilizando cuc y rspec para las pruebas, estaría interesado en escuchar su configuración.

* * ACTUALIZACIÓN
cambié mi configuración un poco desde que escribí esta pregunta. Decidí deshacerme del directorio de especificaciones debajo de la raíz del motor. Ahora solo creo una aplicación de rieles llamada "test_app" y configuro cuc y rspec dentro de esa aplicación como lo haría normalmente en una aplicación de rieles. Luego incluyo la gema como lo hice en el paso n. ° 3 anterior. Como el motor es una sub-aplicación, supongo que es mejor probarlo como si fuera una aplicación de rieles normal. Todavía estoy interesado en escuchar si alguien tiene una configuración diferente.

Respuesta

6

Rails 3.1 (se) generar un buen andamiaje para motores. Me gustaría recomendar el uso RVM para crear un nuevo borde gemset llamado y cambiar a ella:

rvm gemset create edge 
rvm use @edge 

a continuación, instalar canales del borde:

git clone git://github.com/rails/rails.git 
cd rails 
rake install 

A partir de ahí, se puede seguir Piotr Sarnacki's mountable app tutorial, en sustitución de las llamadas, tales como:

bundle exec ./bin/rails plugin new ../blog --edge --mountable 

Con simplemente:

rails plugin new blog --mountable --full 

La opción de montaje hace que la aplicación se pueda montar, mientras que la opción completa la convierte en un motor con pruebas ya integradas. Para probar el motor, este generador genera una carpeta en test llamada dummy que contiene una pequeña aplicación Rails.Puede ver cómo se carga esto en test/test_helper.rb.

Luego, le corresponde a usted masajear los datos para hacer lo que necesita para poder trabajar. Yo recomendaría copiar los archivos de pepino de un estándar rails g cucumber:install en el proyecto y luego jugar con él hasta que funcione. He hecho esto una vez antes, así que sé que es posible, pero no puedo encontrar el código ahora mismo.

Dejarme saber cómo ir.

+0

Ryan, gracias por la información. Eso es lo que estaba buscando. Parece que vienen algunas mejoras buenas en 3.1. Sin embargo, tiene problemas para instalar los rieles. "ERROR: no se pudo encontrar una joya válida 'pkg/rails-3.1.0.beta.gem' (> = 0) en cualquier repositorio" Todas las demás gemas (AR, AS, etc.) se compilan e instalan bien, pero no parece que el Rakefile esté construyendo la gema Rails. Tal vez algo con mi entorno ... Acabo de comenzar a solucionarlo, pero si tiene un minuto, avíseme si puede instalar edge desde la tarea de rake sin error. ¡Gracias hombre! – johnmcaliley

+0

Estuve jugando un poco sin suerte y terminé construyendo la gema manualmente en el directorio de pkg. Luego la instalación del rake funcionó, ya que la gema estaba allí. No estoy seguro de por qué no funcionó de la caja. – johnmcaliley

+0

Además, parece que hay un error con MIT-LICENSE en el directorio de plantillas. erb no puede encontrar Date.today ... ¿tal vez el método fue eliminado dinámicamente? Acabo de codificar la fecha en la plantilla como una solución temporal. Aparte de eso, la plantilla parece sólida. gracias de nuevo – johnmcaliley

2

voy a explicar cómo lo hice usando como ejemplo la siguiente joya: https://github.com/skozlov/netzke-core

La aplicación de pruebas. Está en netzke-core/test/rails_app. Esta aplicación se puede ejecutar de forma independiente, por lo que también puedo usarla para pruebas manuales o para jugar con nuevas funciones, si me gusta.

Para que la aplicación de pruebas para cargar la joya en sí, tengo el siguiente en application.rb:

$:.unshift File.expand_path('../../../../lib', __FILE__) 
require 'netzke-core' 

características pepino. Están en netzke-core/features. En env.rb tengo:

require File.expand_path(File.dirname(__FILE__) + '/../../test/rails_app/config/environment') 

... que cargará la aplicación de pruebas antes de ejecutar las funciones.

Especificaciones. Estos están en netzke-core/spec. En spec_helper.rb Tengo el siguiente:

require File.expand_path("../../test/rails_app/config/environment", __FILE__) 

... que cargará la aplicación de pruebas antes de ejecutar las especificaciones.

Ejecutando pruebas. Esta configuración me permite ejecutar las pruebas de la raíz de la gema:

cucumber features 

y

rspec spec 

fábrica chica. No para esta joya en particular, pero normalmente uso factory_girl en lugar de accesorios (ver, por ejemplo, una configuración similar en https://github.com/skozlov/netzke-basepack).

0

Un poco tarde a la fiesta, pero aquí es mi estrategia:

  1. La generación de los carriles plugin 3.2:

    rails plugin new blog --mountable --full 
    

    Esto crea test/dummy, que contiene los rieles de aplicación ficticia

  2. Añadir las especificaciones para spec

  3. Mover la carpeta ficticia para spec (y, opcionalmente, deshacerse de los otros testfiles)

  4. Adapt specs/spec_helper.rb por lo que incluye

    require File.expand_path("../.../config/environment", __FILE__) 
    

    en lugar de

    require File.expand_path("../dummy/config/environment", __FILE__) 
    
  5. Ejecutar rails g cucumber:install. Generará la carpeta features a.o.

  6. Añadir

    ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(__FILE__) + '/../../spec/dummy') 
    

    antes

    require 'cucumber/rails' 
    

    en features/support/env.rb

Ahora usted tiene features y spec en la raíz de proyectar, mientras que la aplicación rieles ficticias es perfectamente escondido bajo spec/dummy

Cuestiones relacionadas