You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ava与Test-Listen测试Micro端点时返回undefined问题排查

解决Micro框架路由测试返回undefined的问题

我帮你梳理下问题所在,主要有这几个坑:

1. 路由代码的语法错误与依赖缺失

你的routes.js里有两个明显的问题:

  • hello函数末尾多了一个多余的),这会直接触发语法错误,导致函数无法正常定义,请求进来自然得不到正确响应。
  • send方法是Micro框架提供的核心方法,但你没有从micro模块中导入它,这会导致send未定义,根本没法返回内容。
    另外,你用到的router和post应该来自microrouter包,记得要确保已经安装了这个依赖(npm install microrouter)。

2. 测试代码不完整

你给出的测试环境代码没写完:async-to-gen/register的配置截断了,而且缺少实际的测试用例逻辑——没有启动服务、发起请求和断言结果的代码,自然没法验证返回值。

修正后的完整代码

routes.js

const { send } = require('micro');
const { router, post } = require('microrouter');

const hello = async (req, res) => {
  send(res, 200, `Hello, ${req.params.who}`);
};

module.exports = router(
  post('/hello/:who', hello),
);

测试文件(比如test.js)

'use strict';
const listen = require('test-listen');
const micro = require('micro');
const test = require('ava');
const got = require('got');
// 补全async-to-gen的注册配置,匹配你的js文件
require('async-to-gen/register')({ includes: /\.js$/ });

// 导入路由服务
const service = micro(require('./routes'));

test('hello接口返回预期内容', async t => {
  // 启动服务并获取测试地址
  const url = await listen(service);
  // 发起POST请求
  const response = await got.post(`${url}/hello/Cloudscape`, {
    responseType: 'text'
  });
  // 断言返回结果符合预期
  t.is(response.body, 'Hello, Cloudscape');
  // 测试结束关闭服务
  service.close();
});

这样调整后,再运行测试应该就能得到预期的Hello, xxx内容了。

内容的提问来源于stack exchange,提问作者cloudscape-germany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:01:42