diff --git a/packages/core/src/bind/connectFactoryObservable.test.tsx b/packages/core/src/bind/connectFactoryObservable.test.tsx index 8ed18e5..f2df295 100644 --- a/packages/core/src/bind/connectFactoryObservable.test.tsx +++ b/packages/core/src/bind/connectFactoryObservable.test.tsx @@ -18,6 +18,7 @@ import { map, switchMapTo, first, + startWith, } from "rxjs/operators" import { FC, useState } from "react" import React from "react" @@ -497,6 +498,27 @@ describe("connectFactoryObservable", () => { expect(errorCallback).not.toHaveBeenCalled() }) + it("supports streams that emit functions", () => { + const values$ = new Subject() + + const [useFunction, function$] = bind(() => + values$.pipe( + startWith(0), + map((value) => () => value), + ), + ) + const subscription = function$().subscribe() + + const { result } = renderHook(() => useFunction()) + + expect(result.current()).toBe(0) + + values$.next(1) + expect(result.current()).toBe(1) + + subscription.unsubscribe() + }) + it("if the observable hasn't emitted and a defaultValue is provided, it does not start suspense", () => { const number$ = new Subject() const [useNumber] = bind( diff --git a/packages/core/src/bind/connectObservable.test.tsx b/packages/core/src/bind/connectObservable.test.tsx index d1c2064..30b2b3f 100644 --- a/packages/core/src/bind/connectObservable.test.tsx +++ b/packages/core/src/bind/connectObservable.test.tsx @@ -525,6 +525,27 @@ describe("connectObservable", () => { expect(errorCallback).not.toHaveBeenCalled() }) + it("supports streams that emit functions", () => { + const values$ = new Subject() + + const [useFunction, function$] = bind( + values$.pipe( + startWith(0), + map((value) => () => value), + ), + ) + const subscription = function$.subscribe() + + const { result } = renderHook(() => useFunction()) + + expect(result.current()).toBe(0) + + values$.next(1) + expect(result.current()).toBe(1) + + subscription.unsubscribe() + }) + it("should throw an error when the stream does not have a subscription", () => { const [useValue] = bind(of("Hello")) const errorCallback = jest.fn()