2012-02-19 15 views
7

में सापेक्ष फ़ाइल पथ /lib/classes में कक्षा के लिए एक आरएसपीसी परीक्षण है जिसके लिए एक ज़िप फ़ाइल (कोई अपलोड नहीं) तक पहुंच की आवश्यकता है। फ़ाइल /spec/fixtures/files/test.zip में संग्रहीत है। मैं सही पथ कैसे इनपुट करूं ताकि इसका पर्यावरण अज्ञेयवादी हो, यानी पूर्ण पथ के बिना?आरएसपीसी

उत्तर

4

जहाँ तक मुझे पता है (हर महीने या दो से देखकर) spec_helper में कुछ बनाने का कोई बेहतर तरीका नहीं है जो __FILE__ मूल्य का उपयोग सामग्री के बारे में जानने के लिए पथ को पकड़ने के लिए करता है, फिर शीर्ष पर अपने स्वयं के हेल्पर्स बनाएं उसका।

आप __FILE__ से संबंधित *_spec.rb फ़ाइल में भी संबंधित पथ का उपयोग कर सकते हैं।

+0

एक ही मुद्दे वाले अन्य लोगों के लिए: चूंकि मेरा spec/spec/classesयों में रहता है, इसलिए मैं समाप्त हुआ: 'फ़ाइल.dirname (__ FILE__) +' /../ जुड़नार/फ़ाइलें/test.zip'' – wintersolutions

+0

यह ठीक काम करता है लेकिन यह यदि आप अपने चश्मे को पुनर्व्यवस्थित करते हैं तो थोड़ा छोटा हो सकता है। निस्संदेह किसी को यह नहीं मानना ​​चाहिए कि आप रेल का उपयोग करते हैं, लेकिन यदि आपके पास परियोजनाओं तक पहुंच है तो रूट डीआईआर (Rails.root, Sinatra :: Application.root) यह हो सकता है - या शायद नहीं - एक अधिक स्थिर विकल्प हो। इस काम को प्लेटफॉर्म पर बनाने के लिए – lab419

+0

, स्ट्रिंग में '/' एम्बेड न करें, इसके बजाय उपयोग करें: File.join (File.dirname (__ FILE__), '..', 'fixtures', 'files', 'test। ज़िप ') – Ultrasaurus

13

Rails.root आप अनुप्रयोग जड़ दे देंगे, तो

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

आप अपनी हार्ड ड्राइव पर अपनी फ़ाइल का निरपेक्ष पथ, अनुप्रयोग के स्थान के नास्तिक दे देंगे।

अपने spec_helper.rb (या समतुल्य) में एक निरंतर परिभाषित RSpec जड़ की ओर इशारा करते:

+0

पर बैकपोर्ट करता है rspec-rails के साथ आप यहां वर्णित फिक्स्चर को आसानी से एक्सेस कर सकते हैं: https://www.relishapp.com/rspec/rspec-रेल/v/3-5/docs/फ़ाइल स्थिरता – thisismydesign

1

मैं हाल ही में और यहां इस मुद्दे घेरने की कोशिश की है कि मैं क्या के साथ आया है

RSPEC_ROOT = File.dirname __FILE__ 

में इस चर का प्रयोग करें अपने *_spec.rb (या समतुल्य) परीक्षण फ़ाइलें:

require 'spec_helper' 

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

क्यों इस समाधान?

  • यह जो विषय हो सकता है बदलने के लिए
  • यह पहले से ही विद्यमान के अलावा अन्य फ़ाइलों का परीक्षण करने के लिए किसी भी परिवर्धन की आवश्यकता नहीं है (spec_helper नहीं होने की संभावना है) परीक्षण फ़ाइल के स्थान का उपयोग नहीं कर रहा है require 'spec_helper'
  • यह (Rails.root के विपरीत) पर रेल निर्भर नहीं करता है

यहाँ एक सार है: https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07