2014-05-15 50 views
0

我有一個測試自動化應用程序,它針對rails應用程序的用戶參數運行測試。從ruby文件中更改rails環境,然後變回

在Ruby應用程序的測試執行看起來是這樣的:

config = RSpec.configuration 
json_formatter = RSpec::Core::Formatters::JsonFormatter.new(config.out) 
reporter = RSpec::Core::Reporter.new(json_formatter) 
config.instance_variable_set(:@reporter, reporter) 

RSpec::Core::Runner.run(["#{Rails.root}/spec/features/example_spec.rb"]) 

puts json_formatter.output_hash 

這個偉大的工程,但在目前的環境下運行,即development

我想更改Rails環境,以便在test環境中執行此代碼,然後將其更改回來。

有誰知道如何做到這一點?

感謝 理查德

回答

0

您可以隨時更改單個環境(或一組)命令,像這樣的類Unix環境:

RAILS_ENV=testing bundle exec rspec 

或任何你需要執行。例如,您可以定義一個自定義rake任務,其中包含您的spec運行邏輯,並按照上面所述調用它。

使用這個概念並進一步,您可以直接從Ruby執行shell命令,並且只爲該命令設置一個自定義環境變量。在這個shell命令中,你可以執行任意的Ruby代碼(例如通過ruby -e ...),甚至可以調用另一個Ruby文件,它可以在你想要的環境中正確地初始化你需要的任何東西。

我認爲嘗試從代碼中更改當前環境是一種非常糟糕的做法,即使它在某種程度上是可能的。我會親自執行一個自定義的,專用的rake任務,我可以從我的命令行調用任何我需要的環境。