【问题标题】:writing a test for "if (require.main === module) { app.listen(port); }" for a nodeJS express app为 nodeJS express 应用程序编写“if (require.main === module) { app.listen(port); }”测试
【发布时间】:2020-07-24 19:40:47
【问题描述】:

我正在使用 Express 为 NodeJS 自学 TDD,并且我试图通过首先使用 Jest 编写测试来严格要求。

我真的想不出一种方法来为这个文件“index.js”中的最后 3 行编写测试:

const path = require('path');
const express = require('express');
const app = express();
const port = 3000;

app.get('/test', async (req, res) => {
    res.json({message: 'pass!'});
});

app.use(express.static(path.join(__dirname, '../client/public')));

module.exports = app;

if (require.main === module) {
   app.listen(port);
}

我不确定为这样的事情编写测试有多重要,但我认为了解如何为上述代码编写测试可能有助于我了解使用节点导入的工作原理。有人有想法吗?

【问题讨论】:

  • 为什么不直接使用app.listen(port)?这个条件会做什么?
  • zellwk.com/blog/endpoint-testing 解释说,如果我创建多个测试文件,我会收到“正在使用的端口”错误。我同意当前的代码可能是“过度设计的”,但如果可能的话,我仍然想知道如何测试这样的东西。

标签: node.js express jestjs


【解决方案1】:

测试#1:

  • 验证端口 3000 上没有运行任何 Web 服务器。
  • 将此模块加载为顶级模块。
  • 验证 Web 服务器现在是否在端口 3000 上运行。
  • 终止该进程。

测试#2:

  • 确认没有网络服务器在端口 3000 上运行。
  • 将此模块作为子模块从顶级模块加载,该模块除了加载此模块之外什么都不做。
  • 确认没有 Web 服务器在端口 3000 上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多