Как получить доступ к обновленным значениям из асинхронного вызова в модульном тестировании Angular?

#angular #unit-testing #asynchronous #jasmine

#angular #модульное тестирование #асинхронный #jasmine

Вопрос:

У меня есть компонентный метод, подобный этому :

 component { 
let a = 1;

     parentFunc(){
        const res = fromEvent(reader,'loadend').pipe()
        .subscribe(()=>{
             this.a =5;
         });
       }
}
  

Код внутри него тестового примера :

 it("test spec", function() {
    component.parentFunc();

    expect(component.a).toBe(5);
  });

  

Я пишу модульный тест для этого, и когда я вызываю parentFunc, он выводит обновленное значение в консоль.

Но когда я пытаюсь получить к нему доступ, модульный тест похож на компонент.a Он всегда возвращает старое значение.

Каков наилучший способ проверить это значение?

Комментарии:

1. Можете ли вы поделиться кодом, касающимся модульного теста

2. @uiTeam324 проверьте сейчас, полезно ли это

Ответ №1:

Проблема в том, что a не является свойством компонента A. Таким образом, когда вы обновляете значение a, вы всегда получаете старое значение.

Вам следует попробовать выполнить следующее,

 component A { 
 a = 1;

     parentFunc(){
        fromEvent(reader,'loadend').pipe()
        .subscribe(()=>{
             this.a =5;
         });
       }
} 
  

Теперь, если вы проверите, component.a у него должно быть 5 значение.

Комментарии:

1. Эй, извините, но в имени переменной была опечатка. Можете ли вы проверить обновленный вопрос и посмотреть, в чем проблема?

Ответ №2:

   it('test spec', () => {
     spyOn(component, 'fromEvent').and.returnValue(of({}));
    component.parentFunc();
    expect(component.a).toEqual(5);
});
  

Также используйте this.a =5; внутри вашей функции.

Комментарии:

1. parentFunc не возвращает Observable . Что происходит, когда обновляется несколько переменных, поскольку вы предположили, что значение содержит обновленное значение

2. Обновил мой ответ, проверьте