mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
fix(ct): react render array as child (#27692)
Signed-off-by: Sander <info@mesander.com> Co-authored-by: Dmitry Gozman <dgozman@gmail.com> Co-authored-by: mbr <mbr@mbrs-MacBook-Air.local>
This commit is contained in:
parent
462e70ab82
commit
3313381040
@ -76,23 +76,27 @@ async function __pwResolveComponent(component) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {JsxComponent | JsxComponentChild} component
|
* @param {JsxComponentChild} child
|
||||||
|
*/
|
||||||
|
function __renderChild(child) {
|
||||||
|
if (Array.isArray(child))
|
||||||
|
return child.map(grandChild => __renderChild(grandChild));
|
||||||
|
if (isComponent(child))
|
||||||
|
return __pwRender(child);
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {JsxComponent} component
|
||||||
*/
|
*/
|
||||||
function __pwRender(component) {
|
function __pwRender(component) {
|
||||||
if (!isComponent(component))
|
|
||||||
return component;
|
|
||||||
|
|
||||||
const componentFunc = __pwRegistry.get(component.type);
|
const componentFunc = __pwRegistry.get(component.type);
|
||||||
|
const children = component.children.map(child => __renderChild(child)).filter(child => {
|
||||||
return __pwReact.createElement(componentFunc || component.type, component.props, ...component.children.map(child => {
|
|
||||||
if (typeof child === 'string')
|
|
||||||
return child;
|
|
||||||
return __pwRender(child);
|
|
||||||
}).filter(child => {
|
|
||||||
if (typeof child === 'string')
|
if (typeof child === 'string')
|
||||||
return !!child.trim();
|
return !!child.trim();
|
||||||
return true;
|
return true;
|
||||||
}));
|
});
|
||||||
|
return __pwReact.createElement(componentFunc || component.type, component.props, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.playwrightMount = async (component, rootElement, hooksConfig) => {
|
window.playwrightMount = async (component, rootElement, hooksConfig) => {
|
||||||
|
|||||||
@ -75,23 +75,27 @@ async function __pwResolveComponent(component) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {JsxComponent | JsxComponentChild} component
|
* @param {JsxComponentChild} child
|
||||||
|
*/
|
||||||
|
function __renderChild(child) {
|
||||||
|
if (Array.isArray(child))
|
||||||
|
return child.map(grandChild => __renderChild(grandChild));
|
||||||
|
if (isComponent(child))
|
||||||
|
return __pwRender(child);
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {JsxComponent} component
|
||||||
*/
|
*/
|
||||||
function __pwRender(component) {
|
function __pwRender(component) {
|
||||||
if (!isComponent(component))
|
|
||||||
return component;
|
|
||||||
|
|
||||||
const componentFunc = __pwRegistry.get(component.type);
|
const componentFunc = __pwRegistry.get(component.type);
|
||||||
|
const children = component.children.map(child => __renderChild(child)).filter(child => {
|
||||||
return __pwReact.createElement(componentFunc || component.type, component.props, ...component.children.map(child => {
|
|
||||||
if (typeof child === 'string')
|
|
||||||
return child;
|
|
||||||
return __pwRender(child);
|
|
||||||
}).filter(child => {
|
|
||||||
if (typeof child === 'string')
|
if (typeof child === 'string')
|
||||||
return !!child.trim();
|
return !!child.trim();
|
||||||
return true;
|
return true;
|
||||||
}));
|
});
|
||||||
|
return __pwReact.createElement(componentFunc || component.type, component.props, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.playwrightMount = async (component, rootElement, hooksConfig) => {
|
window.playwrightMount = async (component, rootElement, hooksConfig) => {
|
||||||
|
|||||||
@ -49,8 +49,9 @@ test('render string as child', async ({ mount }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('render array as child', async ({ mount }) => {
|
test('render array as child', async ({ mount }) => {
|
||||||
const component = await mount(<DefaultChildren>{[4,2]}</DefaultChildren>);
|
const component = await mount(<DefaultChildren>{[<h4>{[4]}</h4>,[[<p>[2,3]</p>]]]}</DefaultChildren>);
|
||||||
await expect(component).toContainText('42');
|
await expect(component.getByRole('heading', { level: 4 })).toHaveText('4');
|
||||||
|
await expect(component.getByRole('paragraph')).toHaveText('[2,3]');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('render number as child', async ({ mount }) => {
|
test('render number as child', async ({ mount }) => {
|
||||||
|
|||||||
@ -49,8 +49,9 @@ test('render string as child', async ({ mount }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('render array as child', async ({ mount }) => {
|
test('render array as child', async ({ mount }) => {
|
||||||
const component = await mount(<DefaultChildren>{[4,2]}</DefaultChildren>);
|
const component = await mount(<DefaultChildren>{[<h4>{[4]}</h4>,[[<p>[2,3]</p>]]]}</DefaultChildren>);
|
||||||
await expect(component).toContainText('42');
|
await expect(component.getByRole('heading', { level: 4 })).toHaveText('4');
|
||||||
|
await expect(component.getByRole('paragraph')).toHaveText('[2,3]');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('render number as child', async ({ mount }) => {
|
test('render number as child', async ({ mount }) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user