2014-07-10 61 views
0

如果定義了某些環境變量,我有條件地使用Amazon-s3作爲Paperclip的存儲。我想用Rspec來測試這個。基於環境變量的Rspec測試配置

Application.rb 

unless ENV['aws_secret_access_key'].nil? && ENV['aws_access_key_id'].nil? && ENV['aws_bucket'].nil? 
    config.paperclip_defaults = { 
     storage: :s3, 
     s3_credentials: { 
      bucket: ENV['aws_bucket'], 
      access_key_id: ENV['aws_access_key_id'], 
      secret_access_key: ENV['aws_secret_access_key'] 
     } 
    } 
end 

我已經嘗試了幾件事情,沒有運氣。任何有關如何進行測試的見解都會很棒。謝謝。

編輯:

要展開什麼我到目前爲止嘗試,我試圖僞造ENV變量並重新加載應用程序。這不起作用,因爲一旦加載應用程序,我無法找到一種方法來更改ENV變量。

我希望做的是測試如果應用程序被賦予上面的ENV變量(即某些用戶可能擁有它們,有些可能不具備)回形針配置爲S3。

+0

你真的想要檢查文件是否使它成爲S3或只是'ENV'變量存在和設置?如果你想檢查'ENV'變量,你可以簡單地檢查那些'nil'。如果你想檢查'S3',你應該可以在'S3'中放入一個虛擬文件並檢查返回的數據。 – CWitty

+0

我想要做的是測試應用程序配置回形針使用S3,如果ENV變量定義。 我採取的方法是假冒ENV變量,然後嘗試初始化應用程序,並檢查回形針配置是S3。 我遇到的問題是一旦應用程序初始化,您無法重新運行該代碼段。 – ncatoni

+0

如果有些用戶擁有他們,有些則沒有,那麼您是不是想要通過測試,以便他們獲得憑證?似乎應該從更高的層面看待某些事物。 – CWitty

回答

0

我假設你想測試憑據設置是否正確。您可以檢查它,例如,如下:

Rails.application.config.paperclip_defaults[:storage][:s3_credentials][:bucket].should eql BUCKET_NAME 

只是一個額外的點 - 我建議的S3憑據的各個配置移動環境文件(test.rbdevelopment.rb等)。這樣,您可以隔離各個環境的憑據。此外,您可以更輕鬆地測試事物,因爲您可以在測試環境中使用虛擬值作爲憑據。

+0

嘿傑瑞。感謝您的迴應。不幸的是,這不是我想要的。我擴大了更多。任何你可能擁有的新見解都會很棒。謝謝。 – ncatoni