Я изо всех сил пытаюсь получить модульный тест вокруг Обсерватории, чтобы вести себя так, как я ожидаю. Я использую Observable, по сути, просто чтобы сообщить, что процесс завершен. В функции выхода из системы еще нет асин c кода, но будет, когда я реализую все логи c. Мне не нужно, чтобы наблюдаемое возвращало какие-либо данные, я просто хочу, чтобы оно вызывало подписчика в качестве сигнала о завершении выхода из системы.
Проблема в том, что мои модульные тесты показали, что подписчик никогда не вызывается. Обычно я работаю с async / await, по иронии судьбы, потому что Observables, как правило, причиняют мне головную боль, выполняя подобные вещи, но я пытаюсь стать лучше на переднем крае, который, похоже, предпочитает Observables.
Это новое приложение Angular 9, которое я строю. Модульные тесты выполняются в Jest, и я запускаю их через Wallaby.
Вот мое устранение неисправностей:
Я намеренно сломал функцию, чтобы проверить мои работы модульного теста.
Серая рамка в строке 63 моих тестов - это Уоллаби, указывающая, что тест никогда не выполнял эту строку. Поэтому, естественно, тест пройден, потому что утверждение никогда не проверялось.
Если я изменяю наблюдаемое, чтобы вернуть значение, я по крайней мере получаю строку для выполнения ... вроде.
Но я не получаю сообщение об ожидаемом сбое из моего макета. Он должен сообщить, что «ожидаемый вызов clearSession () будет вызван 1 раз, был 0»
Поэтому я запускаю Jest, просто чтобы посмотреть, что происходит, и получаю:
FAIL src/app/auth/auth.service.spec.ts
● AuthService › logout › should destroy the session
1 timer(s) still in the queue.
at node_modules/zone.js/dist/fake-async-test.js:621:31
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:386:30)
at ProxyZoneSpec.Object.<anonymous>.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/proxy.js:117:43)
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:385:36)
at Zone.Object.<anonymous>.Zone.run (node_modules/zone.js/dist/zone.js:143:47)
Чтобы все было по-настоящему странно ... если я исправлю функцию, все будет в порядке! Но только до тех пор, пока Observable возвращает значение, хотя я использую Observable только для уведомления о завершении процесса. Но я не смог заставить мое действительное утверждение потерпеть неудачу, оно провалилось из-за чего-то, казалось бы, не связанного (Таймер в очереди? Что бы это ни значило).
Функция verify
взята из ts-mockito
и работает, в основном, как функция expect(someSpy).toHaveBeenCalledTimes()
.
Есть ли какая-то причуда в наблюдаемых, которые я пропускаю?