2014-03-04 74 views
1

我創建了一個簡單的Restify服務器,並開始使用自己的JSONclient通過Mocha測試其功能。使用Restify的測試數據庫

當單元測試的功能,它可以設置指示測試設置的的環境變量,並連接到MongoDB的根據數據庫。

但是,當使用JSONClient時,您顯然會測試已經連接的'running'API服務器。

有什麼辦法由具有結構轉換的數據庫連接,以不覆蓋開發數據庫端至端通過客戶端測試API功能?

編輯:我想我可以添加一個方法沿着這將切換到測試數據庫「switchDataConnection」的線的API,但是那種感覺骯髒,哈克。

+0

另外,看到這個問題:http://stackoverflow.com/questions/20690302/testing-database-related-code-in-nodejs – clay

回答

1

,對我工作的一種方法是一個env.js文件和config.js文件。

config.js(真的從config-dev.jsconfig-prod.js複製)我把我所有的配置設置。像目錄路徑信息和數據庫設置。

例如,這是我的dev DB連接(我使用的knexjs包):

var knex = { 
    client : 'mysql', 
    connection : { 
    host : '127.0.0.1', 
    user : 'root', 
    password : 'pass', 
    database : 'testdev', 
    charset : 'utf8' 
    } 
}; 

在我的生產配置,我只是有限定的不同的連接。

然後,在env.js,我需要config.js文件加載相應的設置。在我的單元測試中,我可以爲開發加載env.js,並在app.js中加載生產。

有意義嗎?儘管如此,你可以對兩個不同的數據庫進行相同的代碼測試。從評論

編輯:我建議建立一個測試環境,在那裏你可以不同的端口上開始自己的API服務器,然後運行測試過的是(這當然會連接到測試數據庫)。

+0

編輯:道歉爲這個答案的讚賞格式。似乎無法在不回答我自己的問題的情況下對評論做出回覆。肯定是有道理的。其實我有一個文件'conf.js'與module.exports = _.extend( 要求(__目錄名稱+ '/../config/env/all.js'), 要求(__目錄名稱+「/../config/env /'+ process.env.NODE_ENV +'.json')|| {} ); 問題是它無法即時切換連接。測試客戶端需要一個已經運行的API服務器實例,並且無法從測試中切換到新的數據庫。 – Hyra

+0

哦,我明白你的意思了。我並不熟悉在應用程序運行時即時切換數據庫連接,儘管這對我來說不是一個好主意。不知何故,改變你的生產應用程序數據庫連接來運行一些測試聽起來像是一個非常危險的設置。我建議設置一個測試環境,你可以**在另一個端口**上啓動你自己的API服務器,然後運行你的測試(當然這將連接到測試數據庫)。 – clay

+0

您爲測試運行單獨實例的方法很有意義。我將從他們的JSONClient切換到一個單獨的客戶端,它運行它自己的實例,這使得env變量工作正常。我會因此接受你的回答!歡呼:) – Hyra