Как шпион работает с Жасмин в Angular 7? - PullRequest
0 голосов
/ 24 января 2019

Я создал этого шпиона, используя spyOn

it("spyon ", () => {
  const searchChangeEmitSpy =  spyOn(Adders.countlist,"add");
  expect(searchChangeEmitSpy.calls.count()).toEqual(2);
});

и внутри класса Adder у меня есть следующая функция

countlist(){ const i =0;
  this.quoteList.forEach(element => {
       console.log(element); 
       this.add(4,i++);    
  });

}

длина массива quoteList равна 2

что я получаю в результате

Ошибка: метод add () не существует

Ответы [ 2 ]

0 голосов
/ 24 января 2019

С помощью ответа Фабиана я смог отладить и решить мою проблему. На самом деле мне нужно вызвать функцию внутри класса, за которым я шпионил. после этого он дал мне ожидаемый результат.

контрольный пример

it("spyOn countList add()", () => {
          const searchChangeEmitSpy =  spyOn(Adders,"add");
          Adders.addNewQuote("This is my second post");
          Adders.countlist(0);
          expect(searchChangeEmitSpy.calls.count()).toEqual(2);
        });

функция внутри класса, который будет шпионить

 countlist(i:number){
          this.quoteList.forEach(element => {
               console.log(element); 
               this.add(4,i++);    
          });
         //return i; 
      }
0 голосов
/ 24 января 2019

Я не думаю, что вы можете непосредственно шпионить за функцией класса Adders, как это, вместо этого шпионить за prototype или создать экземпляр класса и шпионить за этим.Я бы использовал двух шпионов и реализовал бы это так:

it("spyon", () => {
  const countlistSpy = spyOn(Adders.prototype, 'countlist');
  const addSpy = spyOn(Adders.prototype, 'add');

  // call your function / trigger something that calls the function

  expect(countlistSpy).toHaveBeenCalledTimes(1);
  // more expectations here
});

Или с экземпляром класса в блоке beforeEach вы можете определить свой экземпляр следующим образом:

let adder: Adders = new Adders();

И тогда ваш тест будет выглядеть так:

it("spyon", () => {
  const countlistSpy = spyOn(adder, 'countlist');
  const addSpy = spyOn(adder, 'add');

  // call your function / trigger something that calls the function

  expect(countlistSpy).toHaveBeenCalledTimes(1);
  // more expectations here
});
...