Заглушка Sinon с Args игнорирует дополнительные аргументы - PullRequest
0 голосов
/ 03 октября 2018

Мой производственный код выглядит так:

exports.convertWord = number => { /* some logic here */ }
exports.methodUnderTest = () => {
    return exports.convertWord(1);
}

Тестовый код:

const mockConvertToWord = sinon.stub();
mockConvertToWord.withArgs(1).returns('one');
fileUnderTest.convertWord = mockConvertToWord;

const result = fileUnderTest.methodUnderTest();

expect(result).toBeEqual('one');

Тест, приведенный выше, зеленый.Я ожидаю, что мой тест сломается, если я изменю код продукта на:

exports.convertWord = number => { /* some logic here */ }
exports.methodUnderTest = () => {
    return exports.convertWord(1, 'another arg');
}

, но это не так.Sinon отлично работает, даже когда я передаю дополнительные параметры, которые я не указал в методе withArgs.Как я могу сказать sinon возвращать значение только тогда, когда метод был вызван с точным количеством параметров?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Другой вариант, возможно, вы можете попытаться проверить вызов convertToWord, например

...
expect(result).toBeEqual('one');

// check the function 
sinon.assert.alwaysCalledWithExactly(mockConvertToWord, '1');

Ссылка:

Надеюсь, это поможет

0 голосов
/ 04 октября 2018

заглушка

Один из способов сделать это - использовать stub.callsFake(fakeFunction):

mockConvertToWord.callsFake((...args) => args.length === 1 && args[0] === 1 ? 'one' : undefined);

Альтернативный подход с stub состоит в использовании sinon.assert, чтобы убедиться, что stub был вызван с предполагаемыми аргументами, как отметил @ deerawan.


mock

Другой подход заключается в использовании mock:

const mock = sinon.mock(fileUnderTest);
mock.expects('convertWord').withExactArgs(1).returns("one");

const result = fileUnderTest.methodUnderTest();  

expect(result).toBeEqual('one');
mock.verify();
...