我有一個express API,我正在開發,並且正在嘗試使用該項目來學習所有express的最佳實踐。這就是說我想爲我的終端編寫單元測試。我一直在試圖弄清楚如何運行我的開發服務器以及在手錶模式下運行我的摩卡測試。這個問題是,因爲mocha
和nodemon
正試圖重新啓動/同時運行,我會在我的測試中得到不同的結果,而這種結果會在手錶模式下失敗。在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)
這真的取決於你如何測試這個。看起來您還沒有在您的測試中啓動服務器,因此您當前正在向不可用的服務發送請求。您必須在before塊中啓動服務器,並在after塊中關閉它,具體取決於您的服務器運行所依賴的測試/套件數量。 – shanks