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

如何使用sinon.js/loopback testlab mock twilio-node的messages.create()返回值

解决方案

问题根因

你使用的createStubInstance仅会为Twilio类原型上的顶层方法自动生成stub,messages是Twilio实例下的嵌套对象属性,create属于这个嵌套对象的方法,不会被自动stub,因此直接调用twilioMock.stubs.messages.create会报错。

修复方案

手动构造messages对象的stub,挂载到mock的Twilio实例上即可,修改后的测试代码如下:

import {
  createStubInstance,
  StubbedInstanceWithSinonAccessor,
} from '@loopback/testlab';
import sinon from 'sinon';
import {Twilio} from '../../../../clients/whatsapp-sms-clients/twilio.whatsapp-sms-clients';
import twilio from 'twilio';
// 注意如果LoggingService没导入要补对应路径的导入
import {LoggingService} from '你的logging服务对应路径';

describe('Twilio client (UnitTest)', () => {
  let twilioMock: StubbedInstanceWithSinonAccessor<twilio.Twilio>;
  let logger: StubbedInstanceWithSinonAccessor<LoggingService>;
  let twilioClient: Twilio;
  // 把createStub提出来方便各个用例访问验证
  let twilioMessageCreateStub: sinon.SinonStub;

  beforeEach(() => {
    twilioMock = createStubInstance(twilio.Twilio);
    logger = createStubInstance(LoggingService);
    // 提前构造messages对象的create方法stub
    twilioMessageCreateStub = sinon.stub();
    twilioMock.messages = {
      create: twilioMessageCreateStub
    } as any;
    twilioClient = new Twilio(twilioMock, logger);
  });

  it('should create the message', async () => {
    // 给当前用例设置create方法的返回值
    twilioMessageCreateStub.resolves({
      sid: 'mock_sid_123',
      status: 'queued',
      body: '测试消息',
      // 补充你需要的其他返回字段
    });

    // 执行你要测试的业务逻辑,示例:
    const sendResult = await twilioClient.sendSms('+8613000000000', '测试内容');

    // 验证方法调用符合预期
    sinon.assert.calledOnce(twilioMessageCreateStub);
    sinon.assert.calledWithMatch(twilioMessageCreateStub, {
      to: '+8613000000000',
      body: '测试内容'
    });
  });
});

关键说明

  • 挂载messages对象时加as any是为了避免Typescript类型报错,如果需要严格类型校验,可以匹配twilio库的Messages接口定义补全其他属性即可。
  • 把createStub提到全局作用域后,所有测试用例都可以复用这个stub,按需设置不同的返回值或者异常抛出逻辑,同时方便做调用校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:01