我對/lib/classes
中的類有RSpec測試,需要訪問zip文件(不上載)。該文件存儲在/spec/fixtures/files/test.zip
中。我如何輸入正確的路徑,使其環境不可知,即沒有絕對路徑?RSpec中的相對文件路徑
7
A
回答
4
據我所知(從每月或每兩個月看),在spec_helper
中使用__FILE__
值獲取知道的內容路徑,然後在頂部構建自己的助手,沒有更好的方法那個。
很明顯,您可以在個別的*_spec.rb
文件中使用相對於__FILE__
的路徑。
13
Rails.root
會給你的應用程序的根,所以
Rails.root.join "spec/fixtures/files/test.zip"
會給你硬盤上的文件的絕對路徑,無關的應用程序的位置。
+0
使用rspec-rails,您可以更輕鬆地訪問fixture,如下所述:https://www.relishapp.com/rspec/RSpec的護欄/ v/3-5 /文檔/文件夾具 – thisismydesign 2017-04-26 13:05:52
1
我最近在這裏解決了這個問題,這就是我想出了:
定義一個常量,在您的spec_helper.rb
(或同等學歷)指向的RSpec根:
RSPEC_ROOT = File.dirname __FILE__
使用此變量在*_spec.rb
(或同等學歷)測試文件:
require 'spec_helper'
File.open("#{RSPEC_ROOT}/resources/example_data.json")
爲什麼選擇此解決方案?
- 它不使用測試文件的位置,這可能是 隨時更改(spec_helper很可能不是)
- 它不需要任何附加測試比現有的其他文件
require 'spec_helper'
- 它不依賴on Rails的(不像
Rails.root
)
這裏的要點是:https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07
相關問題
- 1. 相對路徑文件
- 2. 相對文件路徑
- 3. Codeigniter相對路徑文件
- 4. 相對路徑文件
- 5. Java相對文件路徑
- 6. Java文件相對路徑
- 7. perl中的相對文件路徑
- 8. Python包中的相對文件路徑
- 9. 相對URL的絕對文件路徑
- 10. 構建相對路徑中的兩個文件路徑
- 11. DocFX'src'文件夾的相對路徑
- 12. 獲取文件的相對路徑?
- 13. 資源文件的相對路徑?
- 14. std文件流的相對路徑
- 15. 的InstallShield - 相對文件路徑
- 16. iphone:本地文件的相對路徑?
- 17. PHP - 文件夾的相對路徑?
- 18. WiX源文件的相對路徑
- 19. CSS文件的相對路徑?
- 20. 獲取文件的相對路徑C#
- 21. InstallShield LE - 文件的相對路徑
- 22. log4j的相對文件路徑
- 23. 獲取文件的相對路徑asp.net
- 24. UWP從絕對路徑或相對路徑解析文件夾
- 25. 解決不存在的文件的類路徑相對路徑
- 26. 獲取文件路徑的相對路徑?
- 27. 將相對路徑轉換爲svg中的相對路徑
- 28. 將絕對路徑轉換爲批處理文件中的相對路徑
- 29. 以絕對路徑或相對路徑發送curl請求中的json文件
- 30. 如何從QDir和相對文件路徑創建絕對文件路徑?
對於有相同問題的其他人:由於我的規範駐留在/ spec/classes中,所以我最終得到了:'File.dirname(__ FILE__)+'/../ fixture/files/test.zip'' – wintersolutions 2012-02-19 00:29:34
這工作正常,但它如果您重新安排規格,可能會有點脆弱。當然,我們不能假定你使用Rails,但是如果你有權訪問項目的根目錄(Rails.root,Sinatra :: Application.root),這可能會 - 也可能不會 - 是一個更穩定的選擇。 – lab419 2013-09-04 10:21:25
爲了使這個工作跨平臺,不要在字符串中嵌入'/',而是使用: File.join(File.dirname(__ FILE__),'..','fixtures','files','test。 zip') – Ultrasaurus 2013-11-11 18:33:01