#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. Но я не знаю, как это проверить.