2017-05-06 28 views
0

我有一個express API,我正在開發,並且正在嘗試使用該項目來學習所有express的最佳實踐。這就是說我想爲我的終端編寫單元測試。我一直在試圖弄清楚如何運行我的開發服務器以及在手錶模式下運行我的摩卡測試。這個問題是,因爲mochanodemon正試圖重新啓動/同時運行,我會在我的測試中得到不同的結果,而這種結果會在手錶模式下失敗。在watch模式衝突時使用nodemon和mocha測試Express端點

我將多種以下錯誤:

1) GET /user/:userId Status Code 200: 
    Uncaught Error: connect ECONNREFUSED 127.0.0.1:3000 
     at Object.exports._errnoException (util.js:1050:11) 
     at exports._exceptionWithHostPort (util.js:1073:20) 
     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1097:14) 

    1) GET /user/:userId Status Code 200: 
    Uncaught Error: socket hang up 
     at createHangUpError (_http_client.js:302:15) 
     at Socket.socketOnEnd (_http_client.js:394:23) 
     at endReadableNT (_stream_readable.js:975:12) 
     at _combinedTickCallback (internal/process/next_tick.js:80:11) 
     at process._tickCallback (internal/process/next_tick.js:104:9) 

我假設這些錯誤要麼摩卡幹試圖初始化我的應用程序的另一個實例已經運行或在測試前運行服務器有機會重新啓動。 (我認爲這是因爲它有時會成功運行)

我不得不認爲這是一個相當常見的用例,所以我想知道做這種事情的標準方法是什麼。

腳本的package.json

"scripts": { 
    "test": "mocha --compilers js:babel-register --watch", 
    "start": "nodemon src/index.js --exec babel-node --presets es2015,stage-2" 
    } 

失敗user/userId單元測試:

import http from 'http' 
import assert from 'assert' 

describe('GET /user/:userId',() => { 
    it('Status Code 200', done => { 
    http.get('http://localhost:3000/user/1', res => { 
     assert.equal(200, res.statusCode) 
     done() 
    }) 
    }) 
}) 

的src/index.js

import express from 'express' 
import User from './controllers/user' 

const app = express() 
app.get('/user/:userId',new User().getUser) 

export default app.listen(3000) 
+0

這真的取決於你如何測試這個。看起來您還沒有在您的測試中啓動服務器,因此您當前正在向不可用的服務發送請求。您必須在before塊中啓動服務器,並在after塊中關閉它,具體取決於您的服務器運行所依賴的測試/套件數量。 – shanks

回答

3

我也有這個問題。我看了看,nodemon的git的網頁,發現這個 nodemon config

你可以問nodemon忽略測試文件保存,所以它不會重新啓動,並在測試的方式獲得。

這只是真的解決了我的問題時,雖然改變測試文件。

我使用的另一種解決方案是運行

nodemon src/app.js --exec "mocha" 

這需要重新運行的每一個服務器重啓時間的考驗的照顧。

相關問題