Можете ли вы объединить toHaveBeenCalledWith и toHaveBeenCalledTimes в Жасмин? - PullRequest
1 голос
/ 18 января 2020

Я использую эти два отдельных утверждения в модульном тесте Жасмин.

expect(spyFunction).toHaveBeenCalledWith(expectedArgument);
expect(spyFunction).toHaveBeenCalledTimes(expectedCount);

Если я правильно понимаю, это подтвердит следующее.

  • Функция вызывается с помощью expectedArgument хотя бы один раз и
  • Функция вызывается в общей сложности expectedCount раз.

Что я хочу сделать, это подтвердить, что функция вызывается с expectedArgument ровно expectedCount раз. Другими словами, я хочу считать только количество вызовов, в которых совпадает аргумент.

Я понимаю, что мог бы сделать свой собственный подсчет с фальшивкой ...

var callCount = 0;
spyOn(myInstance, 'myFunction').and.callFake(arg => {
  if (arg === expectedArgument) {
    callCount++;
  }
});

...

expect(callCount).toEqual(expectedCount);

... но у этого нет читабельности предыдущего синтаксиса и похоже на изобретение колеса заново. Я не использовал Jasmine все это время, поэтому мне интересно, что я что-то упустил.

Есть ли способ сделать мое утверждение, используя встроенные сопоставители Jasmine? В качестве альтернативы, есть ли другой способ получить аналогично читаемый синтаксис?

1 Ответ

0 голосов
/ 18 января 2020

Более подробную информацию вы можете получить от шпиона, используя calls. Вы можете посмотреть на каждый вызов и его аргументы так:

expect(spyFunction.calls.count()).toBe(2)
expect(spyFunction.calls.argsFor(0)).toEqual(/* args for 1st call */)
expect(spyFunction.calls.argsFor(1)).toEqual(/* args for 2nd call */)

Подробнее см. Документы Jasmine .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...