import React from "react"; import renderer, { act } from "react-test-renderer"; import test from "testeranto/src/Node"; import { ITestSpecification, ITestImplementation, Ibdd_in, Ibdd_out, } from "Testeranto/src/CoreTypes"; export type IInput = React.FC; export type IWhenShape = unknown; export type IThenShape = unknown; export type ISpec< I extends Ibdd_in< unknown, unknown, unknown, unknown, unknown, unknown, unknown >, O extends Ibdd_out< Record, Record, Record, Record, Record > > = ITestSpecification; export default < I extends Ibdd_in< unknown, unknown, unknown, unknown, unknown, unknown, unknown >, O extends Ibdd_out< Record, Record, Record, Record, Record > >( testImplementations: ITestImplementation, testSpecifications: ISpec, testInput: IInput ) => test(testInput, testSpecifications, testImplementations, { beforeEach: function ( CComponent, props ): Promise { return new Promise((res, rej) => { let component: renderer.ReactTestRenderer; act(() => { component = renderer.create( React.createElement(CComponent, props, []) ); res(component); }); }); }, andWhen: async function ( renderer: renderer.ReactTestRenderer, whenCB: () => (a: any) => any ): Promise { await act(() => whenCB()(renderer)); return renderer; }, afterEach: async (store, key, artificer) => { store.unmount(); }, });