У меня есть простой трубопровод Observable из другого Observable, который я хочу протестировать.
const loginState$ = messageBusObservables.loginState$.pipe(
startWith({ isLoggedIn: false })
pluck('isLoggedIn'),
distinctUntilChanged()
)
messageBusObservables - это объект наблюдаемых.Где loginState $ - Observable.
В моих тестах я думал, что легко смогу смоделировать модуль './messageBus' следующим образом: (как импортируется модуль, не имеет значения, но импорт предпочтителен)
import { of } from 'rxjs'
import './messageBus'
jest.mock('./messageBus', () => ({
loginState$: of({ isLoggedIn: true }),
}))
Однако Jest выдает ошибку:
babel-plugin-jest-hoist: фабрике модулей jest.mock()
не разрешено ссылаться на какие-либо вне области видимости.переменные.Недопустимый доступ к переменной: из
Я попытался, поместив его в jest.fn()
Я попытался извлечь of({ isLoggedIn: true })
в переменную.Но я продолжаю получать ту же ошибку от jest.
Так как я могу смоделировать ввод в мои Observables, используя Jest?Я столкнусь с той же проблемой с другими наблюдаемыми, используя .merge, .zip и т. Д.
Это должна быть реальная наблюдаемая, которая является входом моих других наблюдаемых.Я просто хочу смоделировать значение с чем-то вроде of()
, а не над объектом, с методом на нем, который возвращает объект с помощью метода .pipe и т. Д. (Я не хочу высмеивать функциональность Observable),Я хочу передать его реально наблюдаемым со значением, установленным в моем модульном тесте.
Мне также нужно, чтобы эти макеты были динамическими.Таким образом, макет из 1 утверждения может отличаться от макета в следующем утверждении.(очистка их чем-то вроде beforeEach)
РЕДАКТИРОВАТЬ:
Я также пытался использовать babel-plugin-rewire для насмешки над этим модулем, это отлично работало в *Файл .test.js, где я издевался над ним.Но в реальном файле, независимо от того, что я установил для экспорта с использованием rewire, он всегда импортировался как исходный Observable.