2010-09-10 19 views
7

Estoy pensando en ejecutar mis pruebas de pepino en mi aplicación de rieles cuando se ejecuta en heroku. ¿Es esta una manera sensata de verificar las diferencias entre el entorno de desarrollo y el entorno de despliegue?Ejecutar pruebas de pepino en heroku

¿Alguien tiene alguna experiencia en este tipo de escenario? Rake -T me dice "la tarea de rastrillo de pepino no está disponible (el pepino no está instalado)", aunque he especificado los rieles de pepino en mi archivo .gems. ¿Me estoy acercando a esto desde el ángulo equivocado?

¿Alguna idea o sugerencia?

Respuesta

0

¿La gema cucumber también está en su manifiesto de gemas?

1

Eso requeriría la creación, modificación y posterior eliminación de una base de datos de prueba, y dado que Heroku ignora el archivo database.yml, esto no sería posible en absoluto.

Es posible que intente ejecutar la aplicación en el entorno de prueba mediante el establecimiento de la consola, y entonces usted puede ser capaz de ejecutar las pruebas

heroku config:add RACK_ENV=test 

pero incluso si usted conseguir que esto funcione, decir adiós a su base de datos de producción, estoy bastante seguro de que Heroku volverá a anular el database.yml y usará la base de datos que asignó automáticamente a su aplicación.

También puede considerar crear un second app on Heroku solo para probar.

3

Puede usar una instancia separada de Heroku y desplegar su aplicación allí. Entonces deberías poder ejecutar tus pruebas a través de heroku rake.

Puede usar el parámetro --app en la línea de comando heroku para elegir en qué instancia ejecutar los comandos. Simplemente no elimine su base de datos prod por accidente.

0

Dado que ejecutar pruebas directamente en Heroku parece no ser tan trivial, recurrí a la prueba local de la aplicación Heroku, utilizando llamadas de HTTParty en lugar de las habituales de Capybara.

Esto puede funcionar muy bien, al menos para las pruebas de integración.

Por ejemplo, este es el método que utilizo en las definiciones de paso cuando la ejecución de pruebas locales convencionales contra la aplicación local:

def my_http_request(httpmethod, path, body = '') 
    send httpmethod, path, body 
    end 

y este es el método que utilizo cuando la ejecución de pruebas locales contra la aplicación Heroku:

def my_http_request(httpmethod, path, body = '') 
    options = body.blank? ? { :headers => {"Content-Length" => "0"} } : { :body => body } 
    @last_response = HTTParty.send httpmethod, 'https://lit-*****-6305.herokuapp.com' + path, options 
    end 

me carga una o la otra en el mundo pepino, basado en una opción específica pasado a pepino en sí y ubicado en un perfil relevante (por lo que yo simplemente puedo llamar cucumber -p heroku cuando quiero probar contra Heroku).

Por supuesto, en el segundo caso también tengo que cuidar de inicialización de la base de datos Heroku antes de cada escenario, por ejemplo llamando a algo como esto en un 'antes' gancho:

def start_my_heroku_tests 
    @@db = PGconn.open(:host => 'ec2-54-**-****-44.compute-1.amazonaws.com', :port => 5432, :dbname => 'd4d********rmi4k', :user => 'llcm*******jcyh', :password => '7FN_************gcxq') 
    @@db.exec "TRUNCATE sources" 
    @@db.exec "TRUNCATE posts" 
    end 
Cuestiones relacionadas