10
votes

Chemin de fichier relatif dans RSPEC

J'ai un test RSPEC pour une classe dans / lib / classes qui a besoin d'accéder à un fichier zip (pas de téléchargement). Le fichier est stocké dans /spec/fixture/files/test.zip . Comment saisir le chemin correct de sorte que son environnement agnostique, c'est-à-dire sans chemin absolu?


0 commentaires

3 Réponses :


6
votes

Aussi loin que je sache (de regarder tous les mois ou deux), il n'y a pas de meilleure façon de construire quelque chose dans SPEC_HELPER qui utilise le fichier __ __ pour saisir le chemin d'accès à Un peu de contenu, puis construisez vos propres assistants sur cela.

Vous pouvez évidemment utiliser un chemin d'accès par rapport au fichier __ dans l'individu * _ spécifique fichier aussi.


4 commentaires

Pour d'autres personnes avec le même problème: puisque ma spécification réside dans / SPECT / SPECT / CLASSES, j'ai terminé avec: file.dirname (__ file__) + '/../ fixtures / fichiers / test.zip'


Cela fonctionne bien, mais cela pourrait être un peu fragile au cas où vous réorganisez vos spécifications. Bien sûr, il ne faut pas supposer que vous utilisez des rails, mais si vous avez accès aux projets racine dir (rails.root, sinatra :: Application.root) Cela pourrait - ou pourrait ne pas être une alternative plus stable.


Pour faire ce travail sur des plateformes, n'embedez pas '/' dans une chaîne, utilisez plutôt: File.join (fichier.dirname ( fichier ), '..', "Fichiers", "Fichiers ',' test.zip ')


RUBY a également besoin_Relatif - introduit dans 1.9.2, plus il y a un gemme qui la réalise à 1,8



15
votes

rails.root vous donnera la racine de l'application, donc xxx

vous donnera le chemin absolu de votre fichier, agnostique de l'emplacement de l'application sur l'application. votre disque dur.


1 commentaires

Avec RSPEC-Rails, vous pouvez accéder aux appareils plus faciles comme décrit ici: RelishApp.com/rspec/rSpec-Rails/v/3-5/docs/file-fixture



9
votes

J'ai abordé ce problème récemment et voici ce que je suis venu avec:

Définissez une constante dans votre SPEC_HELPER.RB CODE> (ou équivalent) pointant sur RSPEC ROOT: P> xxx pré>

Utilisez cette variable dans votre * _ SPEC.RB CODE> (ou équivalent) Fichiers de test: P>

require 'spec_helper'

File.open("#{RSPEC_ROOT}/resources/example_data.json")
  • Il n'utilise pas l'emplacement du fichier de test qui peut être Sous réserve de changement (SPEC_HELPER n'est probablement pas) LI>
  • Il n'exige aucun ajouts pour tester des fichiers autres que ceux déjà existants nécessite "SPEC_HELPER" CODE> LI>
  • Cela ne dépend pas des rails (contrairement à rails.root code>) li> ul>

    Voici un gist: https://gist.github.com/thisismydesign/9dc142f89b82a5D2983A45A5D2983B07 p> p>


0 commentaires