Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在观察模式冲突中使用nodemon和mocha测试Express端点_Javascript_Unit Testing_Express_Ecmascript 6_Mocha.js - Fatal编程技术网

Javascript 在观察模式冲突中使用nodemon和mocha测试Express端点

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

我有一个express api,我正在开发,并试图使用这个项目来学习express的所有最佳实践。也就是说,我想为我的端点编写单元测试。我一直在试图弄清楚如何运行我的开发服务器,以及如何在监视模式下运行我的mocha测试。这个问题是因为
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块中关闭服务器,具体取决于服务器运行的测试/套件数量。