2017-05-02 31 views
0

我們使用karma-pact插件來運行我們的契約JS客戶端測試,基於https://github.com/pact-foundation/pact-js/blob/master/karma/mocha/client-spec.js的示例。確定業務契約模擬服務器已啓動

在這個例子中,before()中有一個超時,我相信確保模擬服務在運行測試之前就已經開始了(參見評論「對於較慢的Travis CI構建來說是必需的」)。

我不願意在我們的測試中設置一個固定的超時,因爲它會在不同的環境下太短或太長(比如CI與本地),所以我一直在尋找一種方法來檢查服務器是否有開始。

我試過使用協議API https://github.com/pact-foundation/pact-node#check-if-a-mock-server-is-running,但是這似乎啓動了一個新的模擬服務器,它與由karma-pact插件啓動的服務器衝突(錯誤:嘗試運行協議時報告了ESRCH錯誤。 createServer()。從測試中運行)。

有沒有辦法確定模擬服務器是否已經啓動通過等待URL變得可用?可能有一種方法可以獲得由karma-pact插件啓動的模擬服務器的引用,以便使用pact-node API?

回答

0

其實最簡單的方法是等待端口被使用。

Karma Pact默認情況下將啓動模擬端口1234(您可以指定自己的)。一旦端口啓動,服務正在運行,您可以繼續。

例如,你可以使用類似wait-for-host檢測正在運行的模擬服務:

var waitForPort = require('wait-for-port'); 

waitForPort('localhost', 1234, function(err) { 
    if (err) throw new Error(err); 
    // ... Mock Service is up - now we can run the tests 
}); 
+0

有趣的想法,我給一個嘗試。我是否認爲[isPortAvailable函數](https://github.com/pact-foundation/pact-js/blob/master/src/common/net.js)將會使用端口,而模擬服務器試圖啓動,並防止模擬服務器啓動? –

+0

其實這個功能與你想要的完全相反 - 非常正確。它實際上用於在啓動服務器之前確定端口是否空閒。不過希望你明白這個主意!我會更新答案 –

+0

對,我們正在尋找相反的方向。我有一種嘮叨的感覺,使用這種方法可能會導致模擬服務器無法啓動(因爲檢查打開端口1234,雖然簡短)。 –