Проверка того, сколько раз метод вызывался из оператора возврата другого метода в AngularJS - PullRequest
0 голосов
/ 08 января 2020

Новичок ie до JS. У меня есть эта функция. Во-первых, он проверяет данные в кеше. Если его там нет, он вызывает backend для этих данных и сохраняет его в кеше.

function doSomething() {

    return getCachedData()
        .catch(function() {
            return getData()
              .then(saveDataToCache);
        });
}

Мне нужно проверить, сколько раз кэш и backend вызываются в первый и второй раз, когда выполняется метод doSomething. , Вот мой тест:

it('should test', function() {
        spyOn(this.service, 'doSomething').andCallThrough();
        spyOn(this.service, 'getCachedData').andCallThrough();
        spyOn(this.service, 'getData').andCallThrough();

        this.service.doSomething();
        this.$rootScope.$apply();

        expect(this.service.doSomething.callCount).toBe(1);
        expect(this.service.getCachedData.callCount).toBe(1);
        expect(this.service.getData.callCount).toBe(1);

        this.service.doSomething();
        this.$rootScope.$apply();

        expect(this.service.doSomething.callCount).toBe(2);
        expect(this.service.getCachedData.callCount).toBe(2);
        expect(this.service.getData.callCount).toBe(1);
    });

Однако я получаю сообщение об ошибке, в котором говорится, что счетчик вызовов для getCachedData и getData всегда равен 0 как в первый, так и во второй раз.

Изменение this. $ rootScope. $ apply (); до this. $ rootScope. $ digest (); ничего не улучшает. Я также проверил его вручную, и все, кажется, работает нормально.

Я также заметил, что если я изменю функцию doSomething, как показано ниже, то счетчики для getCachedData равны 2 и 2, что правильно.

function doSomething() {

    this.getCachedData();

    return getCachedData()
        .catch(function() {
            return getData()
              .then(saveDataToCache);
        });
}

1 Ответ

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

создать объект. например:

system_metrics ={
 cache_calls:0,
 backend_calls:0,
 reset_cache:function(){this.cache_calls=0;},
 reset_backend_calls:function(){this.backend_calls=0;},
 add_cache_call:function(){this.cache_calls++;}
 add_backend_call:function(){this.cache_calls++;}
}

в

function getCachedData(){
    //add this line
   system_metrics.add_cache_call();
}

в

function getData(){
    //add this line
   system_metrics.add_backend_call();
}

Мне нужно проверить, сколько раз кеш и бэкэнд вызывались на первом и во второй раз метод doSomething выполняется

в

function doSomething(){
  if(system_metrics.cache_calls === 1){
     //the first time the method doSomething is executed
  }
  if(system_metrics.cache_calls === 2){
     //the second time the method doSomething is executed
  }
  if(system_metrics.backend_calls === 1){
     //the first time the method doSomething is executed
  }
  if(system_metrics.backend_calls === 2){
     //the second time the method doSomething is executed
  }
}

в любое время во время выполнения. Допустим, в конце дня вы можете проверить system_metrics.cache_calls для дать вам общее количество вызовов кеша за день ... то есть, если вы никогда не сбрасывали вызовы кеша

в любое время во время выполнения, вы можете очистить количество вызовов кеша с помощью system_metrics.reset_cache_calls

если ваш вопрос состоит в том, чтобы проверить, сколько раз вызывался кэш при первом или втором запуске doSomething.

если ваш вопрос заключается в том, чтобы проверить, сколько раз вызывался внутренний интерфейс при выполнении doSomething запускается в первый или второй раз.

добавьте следующее к вашим system_metrics do_something_calls add_do_something_call reset_do_something_call и добавьте add_do_something_call к вашему do_something function я думаю, вы получите картинку

с таким подходом вы можете отследить любого меня три c, которые вы хотите в любое время, когда вы хотите

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