проблемный юнит-тест для слабого уведомления nodejs - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь написать модульный тест с заглушками sinon для slack-notify.

const sinon = require( 'sinon' );
const { expect } = require( 'chai' );
const slackObj = require( 'slack-notify' )( '' );
const slackNotifcation = require( './slackNotificationUtil' );

describe( 'Slack notification', () => {
  let logStub;
  let slackStub;
  before(() => {
    process.env.NODE_ENV = 'unittest';
    slackStub = sinon.stub( slackObj, 'send' ).returns(() => {});
  });

  after(() => {
    logStub.restore(); // Unwraps the spy
    slackStub.restore();
    delete process.env.NODE_ENV;
  });

  it( 'can send notifications', ( done ) => {
    slackNotifcation.sendSlackNotification( 'SOME MESSAGE' ).then(( response ) => {
      // eslint-disable-next-line no-unused-expressions
      expect( response ).to.be.true;
      done();
    });
  }).timeout( 10000 );
});

Но метод send, о котором я говорю, не работает. Когда я запускаю тест, все еще работает оригинальный метод отправки slack-notify.

Что я делаю не так при работе с заглушкой?

вот фактический метод, который я написал:

const slackObj = require( 'slack-notify' );

const config = require( './../../config/' );

exports.sendSlackNotification = message => new Promise(( resolve, reject ) => {
  if ( process.env.NODE_ENV !== 'dev' ) {
    const options = {};
    Object.assign( options, config.slack );
    options.text = message;
    slackObj( options.url ).send( options, ( err ) => {
      if ( err ) {
        reject( false );
      }
      resolve( true );
    });
  } else {
    resolve( true );
  }
});
...