Ожидаемая ценность после setTimeout, в котором установлено

#javascript #angular #unit-testing

#javascript #угловой #модульное тестирование

Вопрос:

Я не могу установить для ожидаемого значения значение, равное в setTimeout. У меня есть два значения: const first = 0; const second = 0;

но эта ошибка при сбросе является ошибкой неподтвержденного типа: вы указали ‘undefined’ там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Interable.

 setNumber() {
   setTimeout(() => {
     first = 12;
     second = 1235
}, 250);

it('Should execute setNumber', fakeAsync(() => {`
   setTimeout(() => {
     expected(first).toEqual(12);
     expected(second ).toEqual(1235);
   }, 251)
}))
  

Ответ №1:

В функции fakeAsync используйте tick() для эмуляции таймаута. Что-то вроде этого:

 it('Should execute setNumber', fakeAsync(() => {
    let first;
    let second;

    setTimeout(() => {
      first = 12;
      second = 1235;
    }, 250);

    tick(251);

    expect(first).toEqual(12);
    expect(second).toEqual(1235);
  }));
  

Для понимания, отметьте 249, и тест не будет выполнен.

 it('Should execute setNumber', fakeAsync(() => {
    let first;
    let second;

    setTimeout(() => {
      first = 12;
      second = 1235;
    }, 250);

    tick(249);

    expect(first).toEqual(12);
    expect(second).toEqual(1235);
  }));
  

Надеюсь, я вам помог 🙂

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

1. Когда я последую вашему предложению. Но это false. Насколько я понимаю, когда ставится галочка с 250, она еще не установлена. но в тике с 251 тест может быть истинным. Но я не знаю, как установить ожидаемое значение после тайм-аута события запуска, очистить тайм-аут и установить его снова

2. Я не совсем понимаю, чего вы хотите. Не могли бы вы написать пример?

3. я так сожалею о моем позднем ответе. Мой пример таков: в 250 первое значение будет установлено равным 12, а в 251 я ожидаю, что первое значение будет равно 12. Но я не знаю, как это проверить.