#javascript #angular #unit-testing #jasmine #karma-jasmine
#javascript #угловой #модульное тестирование #jasmine #карма-жасмин
Вопрос:
Мне нужно протестировать этот код с помощью jasmine@2.99.1
этот код из my-component.ts
startChatting(agent, platform) {
if (this.params.startChatting instanceof Function) {
this.params.startChatting(agent, platform, this.params.rowIndex);
}
}
и это моя попытка протестировать приведенный выше код: my-component.spec.ts
it('ensure that startChatting does not call "params.startChatting" if "params.startChatting"
is not instanceOf Function', () => {
component.params = {
startChatting: null,
rowIndex: 2
}
spyOn(component.params, 'startChatting');
component.startChatting('dummyId', 'telegram');
expect(component.params.startChatting).not.toHaveBeenCalled();
});
но тест завершается неудачей с этим сообщением «Ошибка: ожидаемый запуск spychatting не был вызван». что означает, что вызывается внутренний метод.
Поэтому я пытаюсь консольно зарегистрировать внутренний метод, для которого я установил значение null, как вы видите в начале моего тестового примера, но я обнаружил, что оно не равно null, вместо этого оно выглядит следующим образом:
ƒ () { return fn.apply(this, arguments); }
и я знал, что это изменилось после вызова функции spyOn.
Итак, мой вопрос в том, как проверить такой случай? и мне нужно убедиться, что if params.startChatting не был экземпляром функции, не вызывался.
Заранее спасибо
Комментарии:
1. Вы не можете проверить этот случай. Ошибка связана с тем, что null не имеет типа
Jasmine.spy
… Вы можете протестировать с помощью getter параметр startChatting2. спасибо @Akxe за ваш реплей, не могли бы вы объяснить, как протестировать с помощью getter или дать мне ссылку, которая объясняет это
Ответ №1:
Этот случай неразрешим, так как у вас нет функции для тестирования. Однако это может сработать для вас…
let startChattingGetterInwoked = 0;
component.params = {
get startChatting() {
startChattingGetterInwoked ;
return null;
},
rowIndex: 2
}
component.startChatting('dummyId', 'telegram');
expect(startChattingGetterInwoked).toBe(1);
// Not sure how offten it is called, but at least one should be called due to `typeof`