首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于AWS X-Ray呼叫的Sinon存根

用于AWS X-Ray呼叫的Sinon存根
EN

Stack Overflow用户
提问于 2019-06-13 23:22:18
回答 1查看 636关注 0票数 1

我正在尝试为AWS X-Ray调用设置存根,以便在AWS外部单元测试NodeJS Lambdas。

我在我的lambda中有下面的代码。我如何使用sinon来存根出下面所示的对AWSXRay应用程序接口的调用?getSegment()调用必须被存根,然后“链接”,这样我才能调用addNewSubSegment(parm)?

代码语言:javascript
复制
const AWSXRay = require('aws-xray-sdk-core');
...

const rootSubSegment = AWSXRay.getSegment().addNewSubsegment("RootSubSegment");
rootSubSegment.addAnnotation("MyAnnotationKey", "MyAnnotationData");
rootSubSegment.addMetadata("MyMetaDataKey", "MyMetaData");

const s3SubSegment = AWSXRay.getSegment().addNewSubsegment("Do S3 Stuff");
...
s3SubSegment.close();

rootSubSegment.close();
EN

回答 1

Stack Overflow用户

发布于 2019-06-14 10:13:57

要返回具有存根addNewSubsegment属性的对象,只需存根getSegment即可。

看起来,您的代码在需要时就会运行,因此在测试中需要代码之前,您需要确保存根已经就位。

下面是一个可操作的示例测试,帮助您开始:

代码语言:javascript
复制
const AWSXRay = require('aws-xray-sdk-core');
const sinon = require('sinon');

describe('code', () => {
  it('should add subsegments', () => {
    const getSegmentStub = sinon.stub(AWSXRay, 'getSegment');
    const addNewSubsegmentStub = sinon.stub();
    getSegmentStub.returns({ addNewSubsegment: addNewSubsegmentStub });
    const rootSubSegmentMock = {
      addAnnotation: sinon.spy(),
      addMetadata: sinon.spy(),
      close: sinon.spy()
    }
    const s3SubSegmentMock = {
      close: sinon.spy()
    }
    addNewSubsegmentStub.onFirstCall().returns(rootSubSegmentMock);
    addNewSubsegmentStub.onSecondCall().returns(s3SubSegmentMock);

    require('[path to your code]');  // <= now require the code to run it

    sinon.assert.calledWithExactly(addNewSubsegmentStub.firstCall, 'RootSubSegment');  // Success!
    sinon.assert.calledWithExactly(addNewSubsegmentStub.secondCall, 'Do S3 Stuff');  // Success!
    sinon.assert.calledWithExactly(rootSubSegmentMock.addAnnotation, 'MyAnnotationKey', 'MyAnnotationData');  // Success!
    sinon.assert.calledWithExactly(rootSubSegmentMock.addMetadata, 'MyMetaDataKey', 'MyMetaData');  // Success!
    sinon.assert.called(s3SubSegmentMock.close);  // Success!
    sinon.assert.called(rootSubSegmentMock.close);  // Success!
  })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56583787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档