Угловое модульное тестирование: как проверить, получает ли шпионский метод правильный аргумент? - PullRequest
0 голосов
/ 05 июля 2019

Допустим, у нас есть метод с именем Method1, который принимает и объект obj={ name: 'jack', phone: '123' }

, как вы можете видеть, здесь есть два свойства, name и phone.

Method1 внутренне вызывает Method2 с obj.phone в качестве аргумента.

FIDDLE

export class AppComponent {  
  method1(obj: any) {
    this.method2(obj.phone);
  }
  method2(val) {

  }
}

Я хотел бы проверить, был ли вызван метод2, а также был ли ему передан правильный аргумент.Который в этом случае всегда будет собственностью телефона obj.

Является ли callFake () решением?Как мне это сделать?

Код, который не работает:

it('should do something', () => {
    let obj = { name: 'jack', phone: '123' }
    let passedarg;
    let spy = spyOn(subject, 'method2').and.callFake(function (arg) {
      passedarg = arg;
    });
    expect(obj).toHaveBeenCalledWith(obj.phone);
  });

1 Ответ

1 голос
/ 05 июля 2019

Я не уверен, что вы сейчас тестируете.Вы проверяете, что method2 вызывается со свойством phone объекта, переданного в качестве аргумента method1?

В своем тесте в настоящее время вы шпионите за method2 и предоставляете фиктивную реализацию (callFake).Затем вы утверждаете, что объект javascript obj был вызван со свойством phone, которое он содержит.Вам нужно вызвать саму функцию subject.method1(obj), и тогда вы сможете увидеть, был ли вызван шпион.

Если это то, чего вы пытались достичь, я думаю, это то, что вы могли искать:

  it('should do something', () => {
    let obj = { name: 'jack', phone: '123' };
    spyOn(subject, 'method2');
    subject.method1(obj);
    expect(subject.method2).toHaveBeenCalledWith(obj.phone);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...