import React from 'react'; import { assert, describe, it } from 'vitest'; import { createBridgeComponent, createRemoteComponent } from '../src'; import { act, fireEvent, render, screen, waitFor, } from '@testing-library/react'; import { createContainer, getHtml, sleep } from './util'; describe('bridge', () => { let containerInfo: ReturnType; beforeEach(() => { containerInfo = createContainer(); }); afterEach(() => { containerInfo?.clean(); }); it('createBridgeComponent life cycle', async () => { function Component() { return
life cycle render
; } const lifeCycle = createBridgeComponent({ rootComponent: Component, })(); lifeCycle.render({ dom: containerInfo?.container, }); await sleep(200); expect(document.querySelector('#container')!.innerHTML).toContain( '
life cycle render
', ); lifeCycle.destroy({ dom: containerInfo?.container, }); expect(document.querySelector('#container')!.innerHTML).toContain(''); }); it('createRemoteComponent', async () => { function Component({ props }: { props?: Record }) { return
life cycle render {props?.msg}
; } const BridgeComponent = createBridgeComponent({ rootComponent: Component, }); const RemoteComponent = createRemoteComponent({ loader: async () => { return { default: BridgeComponent, }; }, fallback: () =>
, loading:
loading
, }); const { container } = render( , ); expect(getHtml(container)).toMatch('loading'); await sleep(200); expect(getHtml(container)).toMatch('life cycle render'); expect(getHtml(container)).toMatch('hello world'); }); it('createRemoteComponent and obtain ref property', async () => { const ref = { current: null, }; function Component({ props }: { props?: Record }) { return
life cycle render {props?.msg}
; } const BridgeComponent = createBridgeComponent({ rootComponent: Component, }); const RemoteComponent = createRemoteComponent({ loader: async () => { return { default: BridgeComponent, }; }, fallback: () =>
, loading:
loading
, }); const { container } = render( , ); expect(getHtml(container)).toMatch('loading'); await sleep(200); expect(getHtml(container)).toMatch('life cycle render'); expect(getHtml(container)).toMatch('hello world'); expect(ref.current).not.toBeNull(); }); });