【问题标题】:React Jest issue when exporting server for integration testing导出服务器以进行集成测试时出现 React Jest 问题
【发布时间】:2020-06-04 20:47:40
【问题描述】:

很简单的情况,我正在尝试导入 app.listen(port) 以进行测试。测试将失败(失败原因:app.address 不是函数和 server.close 不是函数)。实际上服务器变量返回一个空对象,所以导入没有正确完成,这就是测试用例失败的原因......

genres.test.js

const request = require("supertest");

let server;

describe("/api/genres", () => {
  beforeEach(() => {
    server = require("../../index");
  });
  afterEach(() => {
    server.close();
  });

  describe("GET /", () => {
    it("should return all genres", async () => {
      const res = await request(server).get("/api/genres");
      expect(res.status).toBe(200);
    });
  });
});

index.js

const express = require("express");
const app = express();

const port = process.env.PORT || 3000;
    const server = app.listen(port, () => console.log(`Listening on port ${port}`));

    module.exports = server;

我是否遗漏了有关导入的内容? 如果您需要更多代码行/部分(请注意,我提供的 index.js 不完整)或者您是否需要完整的错误消息,请告诉我。

我知道这个问题已经被问过好几次了,但在大多数情况下,解决方案只是导入 app.listen 而不是 app,我已经这样做了。 我也尝试使用 export default 而不是 module.exports。

【问题讨论】:

    标签: javascript reactjs testing jestjs supertest


    【解决方案1】:

    它对我有用。

    index.js:

    const express = require('express');
    
    const app = express();
    const port = process.env.PORT || 3000;
    
    app.get('/api/genres', (req, res) => {
      console.log('api genres');
      res.sendStatus(200);
    });
    
    const server = app.listen(port, () => console.log(`Listening on port ${port}`));
    
    module.exports = server;
    

    index.test.js:

    const request = require('supertest');
    
    let server;
    
    describe('/api/genres', () => {
      beforeEach(() => {
        server = require('./index');
      });
      afterEach(() => {
        server.close();
      });
    
      describe('GET /', () => {
        it('should return all genres', async () => {
          const res = await request(server).get('/api/genres');
          expect(res.status).toBe(200);
        });
      });
    });
    

    测试结果:

     PASS   apollo-graphql-tutorial  src/stackoverflow/60321422/index.test.js
      /api/genres
        GET /
          ✓ should return all genres (289ms)
    
      console.log src/stackoverflow/60321422/index.js:11
        Listening on port 3000
    
      console.log src/stackoverflow/60321422/index.js:7
        api genres
    
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        1.693s, estimated 2s
    

    【讨论】:

    • 我从头重写了APP,现在可以正常使用了。不知道是什么问题。我应该在发布之前这样做,抱歉打扰了。
    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多