Sinon, заглушая функцию, переданную в качестве параметра

javascript node.js testing sinon stub

514 просмотра

1 ответ

У меня есть следующий пример класса:

function Example() {...}
Example.prototype.someFunc1() {...}
Example.prototype.someFunc2() {...}
Example.prototype.func(func) {var res = func(); ...}

Я обычно звоню Example#func()следующим образом:

var example = new Example();
example.func(example.someFunc1)
// or like this, depending on what I want
example.func(example.someFunc2)

Теперь я Example#someFunc1()в своем тесте заглушки :

var example = new Example();
sinon.stub(example, 'someFunc1').returns(...);
exmaple.func(example.someFunc1);

Проблема в том, что Example#someFunc1()не так заглушки, а как обычно. Что я могу сделать в такой ситуации?

Автор: Jorayen Источник Размещён: 08.11.2019 11:26

Ответы (1)


1 плюс

Решение

В вашем примере вы сохраняете ссылку на функцию. Тогда ты заглушки.

Вы передаете ссылку на оригинальную функцию, а не на заглушенную функцию.

Функция, которую вы заглушаете, не исчезает, когда вы заглушаете ее - поэтому вы можете сделать restore()это позже. Вам либо нужно передать ссылку на саму функцию объекта, например,

sinon.stub(example, 'opt1').returns(42);
example.logic([3, 2], example.opt1);

Или передайте ссылку на заглушку, например,

var fn = sinon.stub(example, 'opt1').returns(42);
example.logic([3, 2], fn);

Последнее, на самом деле, не имеет никакого смысла в качестве теста; Вы можете просто передать любую функцию, нет никаких причин, чтобы заглушить что-либо.

FWIW, ваша скрипка далеко не эквивалентна исходному коду, который вы опубликовали.


Непонятно, что вы пытаетесь протестировать: вы передаете ссылку на функцию - это может быть любая старая функция, независимо от того, прикреплена она к Exampleобъекту или нет , например, анонимная функция подойдет.

Если тестируемая функция сама называется функцией-заглушкой, заглушка имеет смысл.

Автор: Dave Newton Размещён: 20.08.2016 03:07
Вопросы из категории :
32x32