2012-02-21 11 views
5

Como ejercicio de aprendizaje, estoy construyendo una aplicación práctica con Sinatra, Datamapper y RSpec. Estoy usando this template, que es básicamente una repetición de todo lo anterior.Base de datos de prueba de la aplicación Sinatra separada de la base de datos de desarrollo?

El problema que tengo es que la forma en que RSpec y Datamapper parecen estar configurados, cada vez que se ejecuta una especificación que prueba la funcionalidad relacionada con la base de datos, esas pruebas cambian directamente mi base de datos de desarrollo en lugar de una base de datos de prueba.

Por ejemplo, deseo de crear unos objetos de bases de datos antes de ejecutar el resto de la especificación ...

before(:all) { 
    Region.new(:country => "Canada", :country_code => "CA").save 
    ProductLine.new(:reference => "Molders").save 
    Product.new(:name => "The Black Molder").save 
    Cart.new(:price => 25.95).save 
} 

Sin embargo, cada vez que funciono RSpec, los elementos anteriores se añaden a mi base de datos de desarrollo.

¿Por qué no se genera una base de datos de prueba? ¿Cómo puedo hacer que la base de datos de prueba funcione correctamente?

Esto parece bastante similar a this issue here, a excepción de Sinatra en lugar de Rails.

Si es de alguna ayuda, mi código se puede ver here.

Respuesta

16

En spec_helper.rb archivo que está requiriendo my_app.rb archivo que a su vez requiere db.rb para configurar su base de datos, pero esto sucede antes de se llama set :environment, :test, por lo que el bloque de configure :test no se está ejecutando (el medio ambiente es el desarrollo de demora al esa etapa).

Por supuesto no puede llamar al set environment :test antes de requerir Sinatra, pero puede establecer la variable de entorno RACK_ENV, que Sinatra verifica al establecer su entorno.

Así que para asegurarse de que se está ejecutando en el entorno de prueba, añadir esto a la parte superior de spec_helper.rb (o en otro lugar en el inicio de las pruebas, pero antes de que necesite Sinatra):

ENV['RACK_ENV'] = 'test' 

Usted podría eliminar la línea set :environment, :test ya que ahora es redundante.

Esto es similar a la otra pregunta que hace referencia, pero las aplicaciones en rack usan RACK_ENV en lugar de RAILS_ENV.

+0

¡Oye, ese fue el truco! Gracias por su respuesta :) –

+1

Gracias, estaba poniendo 'ENV ['RACK_ENV'] = 'test'' en varios lugares y me frustré por qué no lo estaba recogiendo - después de leer su respuesta lo puse en la parte superior de 'spec_helper.rb' ** antes **' require 'sinatra'' ¡y ahora funciona! – Shevaun

+0

Muchas gracias. Esto me estaba volviendo loco. –

Cuestiones relacionadas