Как исправить функцию уже подсмотрено на ошибку в Жасмин - PullRequest
0 голосов
/ 13 мая 2019

У меня 3 теста, каждый тестирует различные методы.

it('test function1', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function1
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function2', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function2
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function3', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function3
   expect(document.getElementById).toHaveBeenCalled();    
 });

Но когда я запускаю эти тесты, я получаю следующую ошибку: getElementById has already been spied upon. Может кто-нибудь объяснить, почему я получаю эту ошибку, даже если шпионы находятся в разных тестовых наборах и как ее исправить.

1 Ответ

0 голосов
/ 13 мая 2019

После того, как вы один раз шпионите за методом, вы больше не можете шпионить за ним.Если все, что вам нужно сделать, это проверить, вызывается ли он в каждом тесте, просто создайте шпиона в начале теста и сбросьте вызовы в afterEach:

     spyOn(document, 'getElementById');

     afterEach(() => {
       document.getElementById.calls.reset();
     });

     it('test function1', function() {
       // ... some code to test function1
       expect(document.getElementById).toHaveBeenCalled();

     });

    it('test function2', function() {
       // ... some code to test function2
       expect(document.getElementById).toHaveBeenCalled();

     });

    it('test function3', function() {
       // ... some code to test function3
       expect(document.getElementById).toHaveBeenCalled();    
     });
...