Javascript 在观察模式冲突中使用nodemon和mocha测试Express端点
我有一个express api,我正在开发,并试图使用这个项目来学习express的所有最佳实践。也就是说,我想为我的端点编写单元测试。我一直在试图弄清楚如何运行我的开发服务器,以及如何在监视模式下运行我的mocha测试。这个问题是因为Javascript 在观察模式冲突中使用nodemon和mocha测试Express端点,javascript,unit-testing,express,ecmascript-6,mocha.js,Javascript,Unit Testing,Express,Ecmascript 6,Mocha.js,我有一个express api,我正在开发,并试图使用这个项目来学习express的所有最佳实践。也就是说,我想为我的端点编写单元测试。我一直在试图弄清楚如何运行我的开发服务器,以及如何在监视模式下运行我的mocha测试。这个问题是因为mocha和nodemon试图同时重新启动/运行,所以我的测试结果会有所不同,这有点违背了让它处于监视模式的目的 我将讨论以下各种错误: 1) GET /user/:userId Status Code 200: Uncaught Error: conn
mocha
和nodemon
试图同时重新启动/运行,所以我的测试结果会有所不同,这有点违背了让它处于监视模式的目的
我将讨论以下各种错误:
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)
我假设这些错误源于mocha试图初始化已经运行的应用程序的另一个实例,或者测试是在服务器有机会重新启动之前运行的。(我认为这是因为它有时会成功运行)
我不得不认为这是一个相当常见的用例,所以我想知道做这类事情的标准方法是什么
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)
我也有这个问题。我查看了nodemon的git页面,发现了这个 您可以要求nodemon忽略测试文件保存,这样它就不会重新启动并妨碍测试 这只解决了我在更改测试文件时遇到的问题 我使用的另一个解决方案是运行
nodemon src/app.js --exec "mocha"
这会在每次重新启动服务器时重新运行测试。这实际上取决于您如何进行测试。您似乎尚未在测试中启动服务器,因此当前正在向不可用的服务发送请求。您必须在before块中启动服务器,并在after块中关闭服务器,具体取决于服务器运行的测试/套件数量。