Синон заглушки с ExactArgs? - PullRequest
       7

Синон заглушки с ExactArgs?

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

У макетов Синона есть метод withExactArgs, который утверждает количество аргументов, переданных рассматриваемому методу.Есть ли способ получить такое поведение, используя заглушки?

Сейчас они, кажется, работают так:

const methodStub = stub();
methodStub.withArgs().returns(1);
console.log(methodStub()); // prints 1
console.log(methodStub({})); // also prints 1

Я бы хотел, чтобы точное совпадение аргумента,Я посмотрел на добавление пользовательского поведения в Sinon, которое не сработало.Я действительно не знаю, что делать дальше.

Я знаю, что могу проверить аргументы после выполнения вызовов, но чувствую, что чистота теста, написанного таким образом, не стоит.

Кроме того, этот довольно хорошо принятый пост в SO приводит меня в замешательство очень : Может ли заглушка sinon withArgs соответствовать некоторым, но не всем аргументам .Цитата:

если я использую method.get.withArgs (25) .calls ... тогда он тоже не совпадает, потому что withArgs () соответствует all arguments

Кажется, я наблюдаю полную противоположность с Sinon v6, именно то поведение, которое искал ОП ...

1 Ответ

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

Это утверждение из связанного вопроса неверно:

withArgs() соответствует всем аргументам

withArgs нет соответствует всем аргументам.Я добавил ответ с подробностями.


withExactArgs для stub обсуждался, но никогда не реализовывался .


Так что да, проверка аргументов после выполнения вызовов, использование callsFake с пользовательской функцией, добавление пользовательского поведения или использование mock вместо stub являются текущими параметрами в sinonдля утверждения, что метод был вызван с точными аргументами.


В качестве примера заглушка вопроса выглядит так, как будто она должна возвращать 1, только если она вызывается без аргументов, что можно сделать с помощьюcallsFake:

test('stub exact args', () => {
  const stub = sinon.stub();
  stub.callsFake((...args) => {
    if (args.length === 0) {
      return 1;
    }
    return 'default response';
  });

  expect(stub()).toBe(1);  // SUCCESS
  expect(stub({})).toBe('default response');  // SUCCESS
});
...