Заглушка и / или слежка за необязательной глобальной функцией: Sinon, mocha & chai - PullRequest
0 голосов
/ 06 марта 2019

У меня есть метод, который проверяет, определена ли глобальная функция (она может или не может быть доступна, зависит от запроса каждого клиента). Если он определен, он вызовет его с соответствующими данными. Если нет, он потерпит молчание. Это желаемое поведение.

Что я хочу сделать, так это проверить. Есть ли способ издеваться и / или шпионить за libFunction, чтобы я мог убедиться, что он вызывается один раз с правильными данными (функция здесь очень упрощена, в процессе происходит некоторая обработка данных).

Вот метод, о котором идет речь:

function sendData(data) {
  let exists;
  try {
    // eslint-disable-next-line no-undef
    if (libFunction) exists = true;
  } catch (e) {
    exists = false;
  }
  if (exists) {
    // eslint-disable-next-line no-undef
    libFunction(data);
  }
}

Я пытался определить libFunction в моих тестах, а затем заглушить это, но это не делает то, что я хочу:

describe('sendEvent', function () {

  function libFunction(data) {
    console.log('hi', data);
  }

  it('should call libFunction once', function () {
    var stub = sinon.stub(libFunction);
    var data = "testing";
    sendEvent(data);
    expect(stub.called).to.be.true;
  });
});

Этот тест не проходит, однако: AssertionError: expected undefined to be true

Я пробовал нечто похожее со шпионом:

describe('sendEvent', function () {

  function libFunction(data) {
    console.log('hi', data);
  }

  it('should call libFunction once', function () {
    var spy = sinon.spy(libFunction);
    var data = "testing";
    sendEvent(data);
    expect(spy.called).to.be.true;
  });
});

Это также не помогает: AssertionError: expected false to be true

Есть ли способ сделать это?

...