首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest测试后,在阿波罗服务器上杀死或关闭websocket

jest测试后,在阿波罗服务器上杀死或关闭websocket
EN

Stack Overflow用户
提问于 2020-06-18 15:34:36
回答 1查看 810关注 0票数 0

我想知道如何在测试结束后关闭websocket?

目前,我有以下几点:

packages.json

代码语言:javascript
复制
"scripts": {
    "test": "jest --watchAll"
  },
  "jest": {
    "globalSetup": "./tests/jest/globalSetup.js",
    "globalTeardown": "./tests/jest/globalTeardown.js"
  },

server.js

代码语言:javascript
复制
...
const server = new ApolloServer({
    typeDefs,
    resolvers,
    context(request) {
        return {
            prisma,
            request,
        }
    },
})

export { server as default }

globalSetup.js

代码语言:javascript
复制
require("@babel/register")

const server = require("../../server").default

// console.log(server)
module.exports = async () => {
    global.httpServer = await server.listen({ port: 4000 })
}

globalTeardown.js

代码语言:javascript
复制
module.exports = async () => {
    console.log("stop") // Show stop in the console
    await global.httpServer.stop
}

我发出这样的命令:

npm运行测试

测试将被执行,但在手表上,如果我修改一个测试,则会出现以下错误:

代码语言:javascript
复制
Error: listen EADDRINUSE: address already in use :::4000
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1449:7)
    at /Users/jeremiechazelle/Sites/project/server/node_modules/apollo-server/src/index.ts:128:18
    at new Promise (<anonymous>)
    at ApolloServer.<anonymous> (/Users/jeremiechazelle/Sites/project/server/node_modules/apollo-server/src/index.ts:123:11)
    at Generator.next (<anonymous>)
    at /Users/jeremiechazelle/Sites/project/server/node_modules/apollo-server/dist/index.js:18:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/jeremiechazelle/Sites/project/server/node_modules/apollo-server/dist/index.js:14:12)
Emitted 'error' event on WebSocketServer instance at:
    at Server.emit (events.js:316:20)
    at emitErrorNT (net.js:1340:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: -48,
  syscall: 'listen',
  address: '::',
  port: 4000
}

执行测试后,我使用以下命令查看端口4000:lsof -i:4000,并始终看到:

港口不近..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 16:25:48

server.listen返回解析为ServerInfo对象的承诺

代码语言:javascript
复制
export interface ServerInfo {
  address: string;
  family: string;
  url: string;
  subscriptionsUrl: string;
  port: number | string;
  subscriptionsPath: string;
  server: http.Server;
}

所以你需要打电话给global.httpServer.server.close()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62453725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档