当前位置: 首页 > 知识库问答 >
问题:

如何启动一个快速服务器使用测试环境作为节点环境?

阙佐
2023-03-14

在研究了这些问题之后:

  1. Jest环境的异步设置
  2. 导入中未定义的窗口/文档
  3. 使用. ts文件(TypeScript)配置Jest全局测试设置
  4. 关于app.listen()回调
  5. 如何编写Jest配置文件
  6. NodeJS:如何获取服务器的端口?
  7. https://alligator.io/nodejs/serving-static-files-in-express/
  8. Promisifyserver.listen
  9. 自定义节点环境中意外的令牌导入
  10. 如何在子测试中访问Jest测试环境的类属性?
  11. 无法在Jest中创建自定义测试环境
  12. globalSetup在与测试不同的上下文中执行
  13. 全球优先所有
  14. 如何用Jest测试url更改
  15. 为Jest的每个测试文件指定window.location
  16. window.location.href在测试中无法更改
  17. 全球优先所有
  18. 如何使用Jest测试单个文件
  19. https://basarat.gitbook.io/typescript/intro-1/jest

我能够做到这一点:

package.json

{
  "name": "my-project",
  "jest": {
    "testEnvironment": "./testEnvironment.js",
  }
}

testEnvironment.js

const express = require('express');
// const NodeEnvironment = require('jest-environment-node'); // for server node apps
const NodeEnvironment = require('jest-environment-jsdom'); // for browser js apps

class ExpressEnvironment extends NodeEnvironment {
  constructor(config, context) {
    super(config, context);
  }

  async setup() {
    await super.setup();
    const app = express();

    this.global.server = app.listen(0, "127.0.0.1", () => {
        console.log(`Running express server on '${JSON.stringify(server.address())}'...`);

        how to make setup() wait until app.listen callback is finished, 
        i.e., the server has properly started.

    });
    app.use(express.static('../testfiles'));
  }

  async teardown() {
    this.global.server.close();
    await super.teardown();
  }

  runScript(script) {
    return super.runScript(script);
  }
}

module.exports = ExpressEnvironment;

如何使setup()等待app.listen()回调完成,即服务器已正确启动?

以前,当我使用beforeAll()时,我的代码工作正常,因为我可以使用done()通过beforeAll()传递的异步回调:

const express = require('express');
const app = express();
var server;

beforeAll(async (done) => {
    server = app.listen(0, "127.0.0.1", () => {
        console.log(`Running express server on '${JSON.stringify(server.address())}'...`);
        done();
    });
    app.use(express.static('../testfiles'));
});

afterAll(() => {
    server.close();
});

如何等效于NodeEnvironmentsetup()函数上的beforeAlldone()回调?


共有2个答案

凌长恨
2023-03-14

延伸罗伯特·门内尔的回答:

您还可以放置一个自定义回调函数,该函数将只调用promise resolver作为app.listen()的第三个参数,它应该运行该代码,然后在需要某种诊断时调用resolve。

let server;
const app = express();

await new Promise(function(resolve) {
    server = app.listen(0, "127.0.0.1", function() {
        console.log(`Running express server on '${JSON.stringify(server.address())}'...`);
        resolve();
    });
});
this.global.server = server;

然后,您可以访问测试文件中的this.global.server,以获取服务器端口/地址:是否可以在my Jest测试套件中创建一个Express.js服务器?

仰英发
2023-03-14

您可以通过等待listen,将其包装为promise,并调用promise resolve作为对服务器listen的回调来实现这一点

  const app = express();
  let server;
  await new Promise(resolve => server = app.listen(0, "127.0.0.1", resolve));
  this.global.server = server;

您还可以放置一个自定义回调函数,该函数将只调用promise resolver作为app.listen()的第三个参数,它应该运行该代码,然后在需要某种诊断时调用resolve。

 类似资料:
  • 我使用标准配置的sockjs。 函数的工作原理如下: 交换机中调用的每个方法都会向客户端发回一条消息。 现在我的问题是,我想对我的代码进行测试(我想晚做总比不做好),但我不知道如何做。我开始写正常的超文本传输协议测试在摩卡超级测试,但我只是不知道如何处理webSocket。 我希望通过所有测试只有一个webSocket连接可以重用,我在第一条消息后将webSocket连接与用户会话绑定,我也想测试

  • 本文向大家介绍Mac上使用Docker如何快速启动MySQL测试,包括了Mac上使用Docker如何快速启动MySQL测试的使用技巧和注意事项,需要的朋友参考一下 本文主要讨论使用Docker快速启动 MySQL 测试的方法,包括Mac环境。一起看看吧! 近来业界有很多对Docker的讨论,其生态系统发展得很快,然而,从简单的“入门”或“引导”类的文章中能容易地找到成熟的技术,但Docker不然。

  • 我在一个功能文件中有4个测试,@first和@then有2个不同的标签。我希望@first测试首先以并行性运行,@then测试在所有@first测试完成后运行,并行性也是如此。 这个项目在这里:https://github.com/marcesso/qafTesting 问题是所有测试都运行两次(每个测试方法运行一次),@test注释的“groups”属性没有像我预期的那样过滤测试(非常底层htt

  • 官方版本下载 最新的MOAC SCS软件可以从官方的发布地址下载 release link, 解压后可以看到有scs的目录,其中有userconfig.json文件,其内容如下: { "VnodeServiceCfg": "localhost:50062", "DataDir": "./scsdata", "LogPath": "./_logs", "Benefic

  • SAP商务1905 我有一个节点应用程序,我想与我的Hybris集成。我已经创建了一个自定义的addon,并将我的节点应用程序文件放在addon扩展中。现在我想在Hybris服务器start上运行下面的命令。 通过将npm命令放在myextension_compileuisrc_executor buildcallback下,我可以在ant构建上启动节点服务器。 但我的目标是只在MyExtensi

  • 环境搭建 假设已经按照 Weex官方 的教程学会了如何搭建本地开发环境进行 Weex 开发。 第一步:安装 bui-weex-toolkit bui-weex-toolkit 是配合 BUI-Weex 框架使用的命令行工具(CLI),能够快速创建框架脚手架工程、查看发布版本等。该工具需要安装在全局: npm install -g bui-weex-toolkit 正常安装后,打开命令行,输入bui