Вам просто нужно заглушить getSegment
, чтобы вернуть объект с заглушенным свойством addNewSubsegment
.
Похоже, ваш код запускается, как только он требуется, поэтому вам необходимо убедиться, чтозаглушка установлена перед тем, как запросить код в тесте.
Вот рабочий пример теста, с которого можно начать:
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!
})
})