【问题标题】:how to import server app for chai request()?如何为 chai request() 导入服务器应用程序?
【发布时间】:2022-01-13 23:32:00
【问题描述】:

我想在我的 node express 服务器上运行测试,但是这个应用程序正在像这样启动服务器:

createServer()
.then(server => {
    server.listen(PORT);
    Log.info(`Server started on http://localhost:${PORT}`);
})
.catch(err => {
    Log.error("Startup failure.", { error: err });
    process.exit(1);
});

而且我知道chai.request() 需要有一个指向服务器应用程序的参数,我如何导出/导入这个createServer() 函数并将其传递给chai 对象的请求方法?

【问题讨论】:

    标签: node.js express unit-testing chai chai-http


    【解决方案1】:

    您可以使用require.main 来区分您的文件是由 Node 直接运行还是作为模块导入。

    当一个文件直接从 Node.js 运行时,require.main 被设置为它的模块。这意味着可以通过测试require.main === module直接判断文件是否已经运行。

    例如

    server.js:

    const express = require('express');
    
    const PORT = 3000;
    async function createServer() {
      const app = express();
      app.get('/', (req, res) => {
        res.send('hello world');
      });
      return app;
    }
    
    if (require.main === module) {
      createServer()
        .then((server) => {
          server.listen(PORT);
          console.info(`Server started on http://localhost:${PORT}`);
        })
        .catch((err) => {
          console.error('Startup failure.', { error: err });
          process.exit(1);
        });
    }
    
    module.exports = { createServer };
    

    当您从server.js 文件中导入createServer 时,if 语句块将不会执行。因为你要在测试用例中创建服务器实例。

    server.test.js:

    const { createServer } = require('./server');
    const chai = require('chai');
    const chaiHTTP = require('chai-http');
    const { expect } = require('chai');
    chai.use(chaiHTTP);
    
    describe('70284767', () => {
      it('should pass', async () => {
        const server = await createServer();
        chai
          .request(server)
          .get('/')
          .end((err, res) => {
            expect(err).to.be.null;
            expect(res.text).to.be.equal('hello world');
          });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2021-04-06
      • 2018-09-17
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多