Sinon Stub для звонков AWS X-Ray - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь установить заглушки для вызовов AWS X-Ray для модульного тестирования NodeJS Lambdas вне AWS.

У меня есть код ниже в моей лямбде. Как я могу использовать sinon для отключения вызовов API 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();

1 Ответ

1 голос
/ 14 июня 2019

Вам просто нужно заглушить 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!
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...