Тестирование Javascript - функция вызывается со специфическим аргументом - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь написать модульный тест для функции, но не могу понять, как проверить, выполняет ли она вызов вложенной функции с определенным аргументом. Я предполагаю, что мне нужно будет использовать sinon вместе с chai и mocha для этого, но я действительно мог бы использовать некоторую помощь.

Функция, которую я хотел бы протестировать, выглядит следующим образом:

function myFunc(next, value) {
    if (value === 1) {
      const err = new Error('This sets an error');
      next(err);
    } else {
      next();
    }
}

Iхотел бы проверить, вызывается ли next с переменной err или без нее. Из того, что я прочитал до сих пор, я должен использовать шпиона для этого (я думаю), но как бы я использовал этого шпиона? Глядя на этот пример из документации Sinon, мне неясно, откуда берется PubSub:

"test should call subscribers with message as first argument" : function () {
    var message = "an example message";
    var spy = sinon.spy();

    PubSub.subscribe(message, spy);
    PubSub.publishSync(message, "some payload");

    sinon.assert.calledOnce(spy);
    sinon.assert.calledWith(spy, message);
}

Источник: https://sinonjs.org/releases/latest/assertions/

1 Ответ

1 голос
/ 30 октября 2019

Если у вас есть такая функция

function myFunc(next, value) {
    if (value === 1) {
      const err = new Error('This sets an error');
      next(err);
    } else {
      next();
    }
}

Тест может выглядеть следующим образом

it ('should call the callback with an Error argument', function (done) {

    const callback = (err) => {

        if (err && err instanceof Error && err.message === 'This sets an error'){
            // test passed, called with an Error arg
            done();
        } else {
            // force fail the test, the `err` is not what we expect it to be
            done(new Error('Assertion failed'));
        }
    }

    // with second arg equal to `1`, it should call `callback` with an Error
    myFunc(callback, 1);
});

, поэтому вам не обязательно нужен sinon для этого

...