में सापेक्ष फ़ाइल पथ /lib/classes
में कक्षा के लिए एक आरएसपीसी परीक्षण है जिसके लिए एक ज़िप फ़ाइल (कोई अपलोड नहीं) तक पहुंच की आवश्यकता है। फ़ाइल /spec/fixtures/files/test.zip
में संग्रहीत है। मैं सही पथ कैसे इनपुट करूं ताकि इसका पर्यावरण अज्ञेयवादी हो, यानी पूर्ण पथ के बिना?आरएसपीसी
आरएसपीसी
उत्तर
जहाँ तक मुझे पता है (हर महीने या दो से देखकर) spec_helper
में कुछ बनाने का कोई बेहतर तरीका नहीं है जो __FILE__
मूल्य का उपयोग सामग्री के बारे में जानने के लिए पथ को पकड़ने के लिए करता है, फिर शीर्ष पर अपने स्वयं के हेल्पर्स बनाएं उसका।
आप __FILE__
से संबंधित *_spec.rb
फ़ाइल में भी संबंधित पथ का उपयोग कर सकते हैं।
Rails.root
आप अनुप्रयोग जड़ दे देंगे, तो
Rails.root.join "spec/fixtures/files/test.zip"
आप अपनी हार्ड ड्राइव पर अपनी फ़ाइल का निरपेक्ष पथ, अनुप्रयोग के स्थान के नास्तिक दे देंगे।
अपने spec_helper.rb
(या समतुल्य) में एक निरंतर परिभाषित RSpec जड़ की ओर इशारा करते:
पर बैकपोर्ट करता है rspec-rails के साथ आप यहां वर्णित फिक्स्चर को आसानी से एक्सेस कर सकते हैं: https://www.relishapp.com/rspec/rspec-रेल/v/3-5/docs/फ़ाइल स्थिरता – thisismydesign
मैं हाल ही में और यहां इस मुद्दे घेरने की कोशिश की है कि मैं क्या के साथ आया है
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
एक ही मुद्दे वाले अन्य लोगों के लिए: चूंकि मेरा spec/spec/classesयों में रहता है, इसलिए मैं समाप्त हुआ: 'फ़ाइल.dirname (__ FILE__) +' /../ जुड़नार/फ़ाइलें/test.zip'' – wintersolutions
यह ठीक काम करता है लेकिन यह यदि आप अपने चश्मे को पुनर्व्यवस्थित करते हैं तो थोड़ा छोटा हो सकता है। निस्संदेह किसी को यह नहीं मानना चाहिए कि आप रेल का उपयोग करते हैं, लेकिन यदि आपके पास परियोजनाओं तक पहुंच है तो रूट डीआईआर (Rails.root, Sinatra :: Application.root) यह हो सकता है - या शायद नहीं - एक अधिक स्थिर विकल्प हो। इस काम को प्लेटफॉर्म पर बनाने के लिए – lab419
, स्ट्रिंग में '/' एम्बेड न करें, इसके बजाय उपयोग करें: File.join (File.dirname (__ FILE__), '..', 'fixtures', 'files', 'test। ज़िप ') – Ultrasaurus