超级测试在 post 请求时超时

supertest times out on post request

我正在尝试使用 supertest 来测试一些快速路由,但是当我尝试发送 post 请求时测试抛出超时错误,尽管 get 请求实际上在工作。

这是我正在测试的路线

router.post('/', async (req, res) => {
  try {
    const { command, text } = req.body;

    switch (command) {
      case 'abc': return;
      default:
        console.log('123');
    }
  } catch (error) {
    console.error(error);
  }
});

这是测试

describe('test', () => {
  const app: express.Express = express();
  app.use('/', route);
  app.use(express.urlencoded({ extended: true }));

  it('test', async () => {
    await request(app)
      .post('/')
      .send('command=john') 

    expect(handleSurveyListCommand).not.toHaveBeenCalled();
    expect(handleSurveyRespondCommand).not.toHaveBeenCalled();
    expect(consoleErrorSpy).toHaveBeenCalledTimes(1);
    expect(consoleErrorSpy).toHaveBeenCalledWith(new Error('Command not found'));
  });
});

这是抛出的错误

Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error:

即使我在路由中做的唯一事情就是记录一些东西,这个测试也会失败。

这是因为当测试用例中的请求正在等待某些响应时,您没有使用响应进行响应,而是 return 尝试发送响应

router.post('/', async (req, res) => {
  try {
    const { command, text } = req.body;

    switch (command) {
      case 'abc': res.status(200).send("abc");
      default:
        res.status(200).send("123");
    }
  } catch (error) {
    res.status(500).send("unknown error");
  }
});

关于 req.body 未定义 -> 使用在应用程序中解析的正文

app.use(express.bodyParser());