我正在尝试为AWS X-Ray调用设置存根,以便在AWS外部单元测试NodeJS Lambdas。
我在我的lambda中有下面的代码。我如何使用sinon来存根出下面所示的对AWSXRay应用程序接口的调用?getSegment()调用必须被存根,然后“链接”,这样我才能调用addNewSubSegment(parm)?
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();发布于 2019-06-14 10:13:57
要返回具有存根addNewSubsegment属性的对象,只需存根getSegment即可。
看起来,您的代码在需要时就会运行,因此在测试中需要代码之前,您需要确保存根已经就位。
下面是一个可操作的示例测试,帮助您开始:
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!
})
})https://stackoverflow.com/questions/56583787
复制相似问题