2010-05-18 114 views
9

我們在Rails下有一個大型的多開發者項目,我們在這個項目中使用了模型和控制器的測試。現在,開發人員必須在運行測試之前切換「測試」環境的數據庫參數以匹配其本地開發環境。我想知道是否有辦法在'test'之外的任何環境下運行這些測試?Rails單元測試可以運行在與測試不同的環境中嗎?

例如我們在database.yml中:

test: 
    database: ... 
    host: ... 
    username: ... 
    password: ... 
... 
dev-one: 
    ... 
dev-two: 
    ... 

我找不到這個的文檔什麼,但也許我找錯了地方。有任何想法嗎?

謝謝!

+0

您使用哪種測試框架? – 2010-05-18 21:33:09

+0

我們只是使用基本的Test :: Unit,除此之外沒有什麼。我們的測試需求相當簡單,並且比控制器邏輯更接觸任何東西,但是框架不會(據我所知)允許我們在不啓動數據庫層的情況下運行功能測試。請注意,我不是一個Ruby/Rails開發人員,所以這對我來說都是新的...... – futureal 2010-05-18 21:38:20

+0

你有一個'database.yml'給所有開發者嗎?你爲什麼不讓每個開發者創建他/她完全自己的'database.yml'?我建議爲每個開發人員使用不同的'database.yml'。 – jigfox 2010-05-18 22:13:14

回答

0

只是在您要運行測試時明確指定環境。您只需事先做好幾項準備。

說你的新環境將被命名爲「testjohn」(大概是一個名爲John的開發者)。然後:

1-複印配置/環境/ test.rb配置/環境/ testjohn.rb

2-相應DB節添加到配置/ database.yml的(複製從測試節中重命名它,然後大概更改數據庫名稱,密碼和其他數據)。 我(相當簡單)示例使用此:

testjohn: 
    adapter: sqlite3 
    database: db/testjohn.sqlite3 
    pool: 5 
    timeout: 5000 

3-運行測試如下:

RAILS_ENV="testjohn" rake db:migrate 
RAILS_ENV="testjohn" rake test:units 

另外,由於RAILS_ENV僅僅是一個環境變量,你可能有一個腳本,設置它事先,甚至讓每個開發人員在他的.profile或其他文件中配置他自己的RAILS_ENV變量。這樣他們只需運行rake測試:單元並在其個性化環境下自動執行測試。

+2

然而,欣賞這種反應,這正是我所嘗試過的,它不起作用。您在RAILS_ENV中指定的環境實際上是在rake任務的上下文中加載的,但是,一旦ruby執行測試,它將悄悄切換到您的測試環境並清除測試數據庫並加載您的燈具。 經過更多的研究,似乎這種行爲被編碼得很深入Test :: Unit,我有點放棄了這種可能性。但仍然很樂意提供建議。 – futureal 2010-05-19 08:40:54

+1

也試過這個,不起作用 – Joshua 2015-06-25 22:07:03

相關問題