2013-05-25 45 views
0

我有一個網絡應用程序,希望跟蹤/寫來自不同州議會的法案。然而,我發現的問題是,許多州對於賬單模式有不同的規則,進展規則(即一些州允許您重新考慮失敗的法案,而另一些州則沒有),等等。如何創建和測試環境特定的代碼?

我現在在我的模型中如何處理它,是創建一個Bill類,然後有條件地重新打開該類並根據環境變量向該類添加其他字段和驗證。意圖是每個州都有自己的應用程序安裝,所以我將有一個STATE設置爲OR,並使該應用程序使用俄勒岡州的賬單規則。

但是,這對我來說已經成爲一個巨大的問題。像這樣重新開放類可以很好地在生產環境中工作,但是它變得很難測試,因爲類需要在啓動時打開並且不能被禁用以進行測試,除非我以某種方式用不同的環境變量重新加載整個程序。我已經通過Google和StackOverflow進行了搜索,但是我沒有得到任何結果來尋找我正在尋找的最佳實踐,要麼是因爲它們不存在,要麼我不知道它的名稱。

+0

看起來像老式的類繼承問題嗎?好的答案是如何在ActiveRecord中使用它,如果每個狀態有不同的模型行爲是什麼導致你不尋常的代碼結構 - http://stackoverflow.com/questions/1598936/how-to-implement-active-record -ruby-on-rails -inheritance-in-ruby-on-rails-其他任何東西都只是普通的Ruby類繼承,包括分割你的測試(測試基類和多態特性/行爲,以及測試子類的狀態特定行爲) –

回答

1

由於您在詢問環境變量,爲什麼不使用環境變量?

ENV可以做到這一點,只是在那裏添加適當的狀態。

>> ENV['State_Code'] = 'FL' 
=> "FL" 
>> ENV['State_Code'] 
=> "FL" 

更改它,因爲你想測試不同的規則。

這樣做的好處是可以從應用程序的外部進行設置,因爲ENV是從您的環境中讀取的,這並不令人驚訝。

+1

這可以在'Rakefile'中完成,它使用測試命名約定在運行它們之前爲狀態特定的測試設置環境。或者只是有一個編碼查找列表。 –