2012-02-19 13 views
7

Tengo una prueba RSpec para una clase en /lib/classes que necesita acceso a un archivo zip (sin carga). El archivo está almacenado en /spec/fixtures/files/test.zip. ¿Cómo ingreso la ruta correcta para que su entorno sea independiente, es decir, sin una ruta absoluta?Ruta relativa del archivo en RSpec

Respuesta

4

Hasta donde yo sé (por cada mes o dos) no hay mejor forma de construir algo en spec_helper que use el valor __FILE__ para tomar el camino a un poco de contenido, luego construya sus propios ayudantes en la parte superior de eso.

Obviamente puede utilizar una ruta relativa a __FILE__ en el archivo individual *_spec.rb también.

+0

Para otros con el mismo problema: dado que mi especificación reside en/spec/classes, terminé con: 'File.dirname (__ FILE__) + '/../ fixtures/files/test.zip'' – wintersolutions

+0

Esto funciona bien, pero podría ser un poco frágil en caso de que reorganice sus especificaciones. Por supuesto, no debe suponerse que utiliza Rails, pero si tiene acceso al directorio raíz de proyectos (Rails.root, Sinatra :: Application.root), esta podría ser, o no, una alternativa más estable. – lab419

+0

para hacer que esto funcione en todas las plataformas, no incruste '/' en una cadena, en su lugar use: File.join (File.dirname (__ FILE__), '..', 'fixtures', 'files', 'test. zip ') – Ultrasaurus

13

Rails.root le dará la raíz aplicación, por lo

Rails.root.join "spec/fixtures/files/test.zip" 

le dará la ruta absoluta del archivo, agnóstico de la ubicación de la aplicación en su disco duro.

+0

Con rspec-rails, puede acceder a los dispositivos fácilmente como se describe aquí: https://www.relishapp.com/rspec/rspec-rails/v/3-5/docs/archivo-accesorio – thisismydesign

1

me he abordado este tema recientemente y esto es lo que ocurrió:

definir una constante en su spec_helper.rb (o equivalente) que apunta a RSpec raíz:

RSPEC_ROOT = File.dirname __FILE__ 

Esta variable se utiliza en su *_spec.rb (o equivalentes) ficheros de prueba:

require 'spec_helper' 

File.open("#{RSPEC_ROOT}/resources/example_data.json") 

Por qué esta solución?

  • No hace uso de la ubicación del archivo de prueba que puede ser sujetos a cambio (spec_helper es probable que no)
  • No se requieren más adiciones para probar archivos distintos a los ya existentes require 'spec_helper'
  • no depende de rieles (a diferencia de Rails.root)

Aquí hay una Gist: https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07

Cuestiones relacionadas