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

运行Mocha测试校验NetworkManager对象是否成功初始化问题求助

问题原因分析
  • 核心错误1:断言对象错了。当你用__set__把NetworkManager替换成Sinon Stub后,执行new NetworkManager()时,调用的是你这个被stub的NetworkManager函数本身,而非你手动创建的clientFake上的constructor属性。你写的clientFake.constructor是个完全没被调用的空stub,自然断言不通过。
  • 次要问题:业务代码的传参不符合类定义要求。NetworkManager的构造函数要求第一个参数是credentials,第二个才是subscriptionId,你现在只传了一个参数,就算测试过了正式运行也会报错。
修复方案

1. 测试用例修改

直接对stub的NetworkManager本身做断言即可,不需要额外给clientFake加constructor stub,修改后的代码如下:

describe('schedule', () => {
    let revert;
    let networkManagerStub;
    beforeEach(() => {
        // 直接创建NetworkManager的stub
        networkManagerStub = stub();
        revert = reverseProxy.__set__({
            'NetworkManager': networkManagerStub
        });
    });
    // 测试执行后清理stub,避免影响其他用例
    afterEach(() => {
        revert();
    });
    it('run lookup', async () => {
        await stubContext(reverseProxy);
        // 断言stub本身被调用了1次即可
        expect(networkManagerStub.calledOnce).to.equal(true);
        // 如果要验证是通过new关键字调用、以及传参是否正确,可以新增以下断言(等你业务代码修复参数后)
        // expect(networkManagerStub.calledWithNew()).to.equal(true);
        // expect(networkManagerStub.firstCall.args).to.deep.equal([你期望的credentials实例, subscriptionId])
    });
});

2. 业务代码参数修复

你当前业务代码里初始化NetworkManager的传参顺序不对,需要补全credentials参数:

module.exports = async function checkNetwork(context) {
    // 第一个参数传你的credentials实例,第二个才是subscriptionId
    const client = new NetworkManager(
        yourCredentialsInstance,
        subscriptionId,
    );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:06:02