Express.js、Jest、Supertest:测试运行程序在查找路由处理程序时遇到问题

Express.js, Jest, Supertest: Trouble with test runner finding a route handler

我正在尝试使用 Jest 和 Supertest 在 Express 服务器上设置测试。这是我的测试和目标代码:

// routes/index.js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});



// index.test.js
const request = require('supertest');
const express = require('express');

const app = require('express');
const router = require('../index').router;


test('GET /', (done) => {
  request(router)
    .get('http://localhost:4000')
    // .set('Accept', 'application/json')
    .expect(200)
    .end((err, res) => {
      if (err) throw err;
      done();
    })
});

Jest 给我以下错误:

expected 200 "OK", got 404 "Not Found"

      at Test.Object.<anonymous>.Test._assertStatus (node_modules/supertest/lib/test.js:268:12)
      at Test.Object.<anonymous>.Test._assertFunction (node_modules/supertest/lib/test.js:283:11)
      at Test.Object.<anonymous>.Test.assert (node_modules/supertest/lib/test.js:173:18)
      at Server.localAssert (node_modules/supertest/lib/test.js:131:12)

还尝试过:相对 URL('/')。 Error: Can not read property "apply" of undefined

像这样导入在 routes/index.js 中导出的路由器对象:

const router = require('../index').router;  
// TypeError: Cannot read property 'address' of undefined 
// (while pointing at the .get() method)

我怀疑我引入 Router() 的方式可能不正确,但我的直接尝试没有成功。

有人知道这个问题吗?

通过要求 app.js 并将其传递给请求来解决:

const app = require("../../app");

test('GET /cold-start', (done) => {
  request(app)
    .get('/')
    .set('Accept', 'application/json')
    .expect(200)
    .end((err, res) => {
      if (err) throw err;
      done();
    })
});