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

Jest测试getRunningContainers函数返回undefined问题求助

问题排查与修复方案

我帮你梳理下getRunningContainers返回undefined的核心原因,以及对应的修复步骤:

1. Mock对象缺少关键方法导致报错

在你的测试代码里,MockDockerClient.getContainer返回的dummy_container并没有实现inspect方法,但getRunningContainers逻辑中会调用container.inspect()来获取容器详情。当执行到这一步时,会抛出TypeError: container.inspect is not a function的错误,触发catch块,最终返回undefined。

修复Mock对象:

给dummy_container添加inspect方法,让它返回模拟的容器检查信息:

const dummy_container = {
  // 保留你原有的dummy_container属性
  inspect: () => new Promise((resolve) => {
    resolve(dummy_container_inspect); // 这里需要定义一个符合ContainerInspectInfo结构的模拟数据
  })
};

同时,确保MockDockerClient.listContainers返回的dummy_info是一个包含Id字段的数组,比如:

const dummy_info = [{ Id: 'test-container-id' }]; // 符合ContainerInfo的结构要求

2. 测试断言类型不匹配

你的测试用例中,expect(containers).toEqual(dummy_container)是错误的:getRunningContainers返回的是容器数组,而dummy_container是单个容器对象,两者类型完全不匹配。

调整断言逻辑:

如果你的模拟数据返回一个运行中的容器,断言应该改为:

expect(containers).toEqual([dummy_container_inspect]); // 对应inspect返回的模拟数据数组

3. 额外检查点

  • 确认dummy_container_inspect的结构完全符合ContainerInspectInfo类型定义,避免因类型不兼容导致的隐性错误;
  • 可以在catch块中添加更详细的错误日志(比如console.error代替console.log),方便快速定位报错原因:
    catch (err) {
      console.error(`running containers error: ${err}`); // 用error级别日志更醒目
      return;
    }
    

修复后的测试代码示例

调整后的Mock和测试用例大概是这样:

describe('Container Client', () => {
  // 定义模拟数据
  const dummy_info = [{ Id: 'test-id' }];
  const dummy_container_inspect = { /* 填充符合ContainerInspectInfo的结构 */ };
  const dummy_container = {
    inspect: () => Promise.resolve(dummy_container_inspect)
  };

  const MockDockerClient = {
    listContainers: (opts: any) => Promise.resolve(dummy_info),
    createContainer: (opts: any) => Promise.resolve(dummy_container),
    getContainer: (id: any) => Promise.resolve(dummy_container)
  };

  const containerClient = new Container(MockDockerClient);

  test('get running containers returns correct list', async () => {
    const containers = await containerClient.getRunningContainers();
    expect(containers).toEqual([dummy_container_inspect]);
  });
});

内容的提问来源于stack exchange,提问作者Sarthak Kundra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:57:37