Skip to content

Commit 6263267

Browse files
committed
add test for resolve controller
1 parent 5fbfa75 commit 6263267

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

src/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@ import { Subscription, SubscriptionLike, TeardownLogic, Unsubscribable, Observab
33
import { Create, Constructor, InferStateType, ShouldUpdate, StateCompare } from './types'
44
import { useAutoDispose } from './hooks/useAutoDispose'
55
import { ControllerProvider, ControllerProviderProps } from './ControllerProvider'
6-
import { MultiProvider, ReceivableElement, MultiProviderProps, useProvider } from 'react-scoped-provider'
6+
import {
7+
MultiProvider,
8+
ReceivableElement,
9+
MultiProviderProps,
10+
useProvider,
11+
ResourcesNotProvidedError,
12+
} from 'react-scoped-provider'
713
import { useListener } from './hooks/useListener'
814
import { useBuilder } from './hooks/useBuilder'
915
import { useSelector } from './hooks/useSelector'
@@ -19,7 +25,7 @@ export { Listener, ListenerProps }
1925
export { useSelector }
2026
export { useBuilder }
2127
export { useListener }
22-
export { MultiProvider, ReceivableElement, MultiProviderProps, useProvider }
28+
export { MultiProvider, ReceivableElement, MultiProviderProps, useProvider, ResourcesNotProvidedError }
2329
export { ControllerProvider, ControllerProviderProps }
2430
export { useAutoDispose }
2531
export { Create, Constructor, InferStateType, ShouldUpdate, StateCompare }
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { getByTestId, render, waitFor } from '@testing-library/react'
2+
import { Constructor, Controller, ControllerProvider, ResourcesNotProvidedError } from '../../../src'
3+
import { useControllerResolver } from '../../../src/hooks/useControllerResolver'
4+
import { PropsWithChildren } from 'react'
5+
6+
class TestController extends Controller<number> {
7+
constructor() {
8+
super(5)
9+
}
10+
}
11+
12+
const ProviderComponent = ({ children }: PropsWithChildren) => {
13+
return <ControllerProvider source={() => new TestController()}>{children}</ControllerProvider>
14+
}
15+
16+
type ConsumerProps = {
17+
source: Constructor<TestController> | TestController
18+
}
19+
const ComsumerComponent = ({ source }: ConsumerProps) => {
20+
const controller = useControllerResolver(source)
21+
return <h1 data-testid='number'>{controller.state}</h1>
22+
}
23+
24+
it('can get provided data with ctor', () => {
25+
const { container } = render(
26+
<ProviderComponent>
27+
<ComsumerComponent source={TestController} />
28+
</ProviderComponent>,
29+
)
30+
const renderedNumberElement = getByTestId(container, 'number')
31+
const renderedNumber = renderedNumberElement.textContent
32+
const expectedNumber = '5'
33+
expect(renderedNumber).toBe(expectedNumber)
34+
})
35+
36+
it('can get provided data with instance', () => {
37+
const testController = new TestController()
38+
const { container } = render(<ComsumerComponent source={testController} />)
39+
const renderedNumberElement = getByTestId(container, 'number')
40+
const renderedNumber = renderedNumberElement.textContent
41+
const expectedNumber = '5'
42+
expect(renderedNumber).toBe(expectedNumber)
43+
})
44+
45+
it('throw error when not provided ctor', async () => {
46+
jest.spyOn(console, 'error').mockImplementation(() => jest.fn())
47+
48+
const renderer = () => {
49+
render(<ComsumerComponent source={TestController} />)
50+
}
51+
await waitFor(() => expect(renderer).toThrow(ResourcesNotProvidedError))
52+
jest.restoreAllMocks()
53+
})

0 commit comments

Comments
 (0)