【问题标题】:Unable to test expressjs server无法测试 expressjs 服务器
【发布时间】:2020-12-23 18:54:07
【问题描述】:

我想在我的 expressjs 服务器上运行一些基本测试并立即关闭它,但不知何故我不知道怎么做。 我将服务器作为承诺导出。

这是我的服务器文件:index.js

const config = require("./config");
const express = require("express");
// Other imports
const app = express();


const ServerInfo = DatabaseService.init().then(
  () =>
    new Promise((resolve, reject) => {
   
      // Load middlewares.

      // Load routes /api.

      let server = app.listen(config.port, config.host, () => {
       logger.log(
          "info",
          `Server started on : http://${config.host}:${config.port}`
        );
        resolve(server);
      });

 
      });
    }),
  (err) => {
    console.log("error", "Database is not ready!");
  }
);

module.exports = ServerInfo;

这是我的测试文件:

const chai = require("chai");
const config = require("../../config");
const server = require("../../index");

const expect = chai.expect;

describe("Server", () => {
  it("tests server starts on configured port.", function () {
    return server.then((serverObj) => {
      console.log(serverObj.address.port());
      expect(serverObj.address().port).to.equal(config.port);
    });
  });
});

我打算在测试完成后退出程序。

更新

最后我通过像这样更新测试文件让它工作。

const chai = require("chai");
const config = require("../../config");
const server = require("../../index");

const expect = chai.expect;
describe("Server", () => {
  it("tests server starts on configured port & host", function (done) {
    this.timeout(15000);
    server
      .then((serverObj) => {
        expect(serverObj.address().address).to.equal(config.host);
        expect(serverObj.address().port).to.equal(config.port);
        return serverObj;
      })
      .then((serverObj) => {
        serverObj.close(() => {
          done();
        });
      })
      .catch((err) => {
        done(err);
      });
  });
});

现在的问题是运行所有测试后测试挂起而没有退出,我猜是因为服务器没有关闭。调用 server.close() 没有任何区别。

【问题讨论】:

    标签: javascript node.js express mocha.js


    【解决方案1】:

    这可能是您导入包的方式。

    如果您可以使用import,则从chai 调用expect 的正确方法是。

    import { expect } from "chai";
    

    但是,您使用的是require。试试这个。

    const expect = require("chai").expect;
    

    const chai = require("chai");
    const expect = chai.expect;
    

    如果您需要 Chai 提供的多个方法或属性,最后一种方法可能最有用。

    此外,请检查以确保在您运行 node test 时将您的 package.json 文件设置为运行 mocha

    【讨论】:

    • 谢谢@JRCharney。让我试试这个。
    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2020-04-22
    • 2021-12-17
    • 2018-07-15
    相关资源
    最近更新 更多