diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json
index b7a3b3f8c..d39ab0e65 100644
--- a/packages/plugin-designer/package.json
+++ b/packages/plugin-designer/package.json
@@ -19,6 +19,8 @@
"author": "xiayang.xy",
"dependencies": {
"@alilc/lowcode-editor-core": "1.0.3",
+ "@alilc/lowcode-designer": "1.0.3",
+ "@alilc/lowcode-utils": "1.0.3",
"react": "^16.8.1",
"react-dom": "^16.8.1"
},
diff --git a/packages/renderer-core/build.test.json b/packages/renderer-core/build.test.json
new file mode 100644
index 000000000..dcdc891e9
--- /dev/null
+++ b/packages/renderer-core/build.test.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "build-plugin-component",
+ "@alilc/lowcode-test-mate/plugin/index.ts"
+ ]
+}
diff --git a/packages/renderer-core/jest.config.js b/packages/renderer-core/jest.config.js
index af6e06512..c719abc5f 100644
--- a/packages/renderer-core/jest.config.js
+++ b/packages/renderer-core/jest.config.js
@@ -1,7 +1,3 @@
-const esModules = [
- '@alilc/lowcode-datasource-engine',
-].join('|');
-
module.exports = {
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
diff --git a/packages/renderer-core/package.json b/packages/renderer-core/package.json
index f0f8e8924..72e56fb14 100644
--- a/packages/renderer-core/package.json
+++ b/packages/renderer-core/package.json
@@ -10,6 +10,7 @@
"es"
],
"scripts": {
+ "test": "build-scripts test --config build.test.json",
"build": "build-scripts build --skip-demo"
},
"dependencies": {
diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx
index 82d2884e1..286e0da43 100644
--- a/packages/renderer-core/src/renderer/base.tsx
+++ b/packages/renderer-core/src/renderer/base.tsx
@@ -565,7 +565,7 @@ export default function baseRendererFactory(): IBaseRenderComponent {
engine?.props?.onCompGetCtx(schema, scope);
}
props.key = props.key || `${schema.__ctx.lceKey}_${schema.__ctx.idx || 0}_${idx !== undefined ? idx : ''}`;
- } else if (typeof idx === 'number' && !props.key) {
+ } else if ((typeof idx === 'number' || typeof idx === 'string') && !props.key) {
// 仅当循环场景走这里
props.key = idx;
}
diff --git a/packages/renderer-core/test/hoc/__snapshots__/leaf.test.tsx.snap b/packages/renderer-core/test/hoc/__snapshots__/leaf.test.tsx.snap
new file mode 100644
index 000000000..591f768e2
--- /dev/null
+++ b/packages/renderer-core/test/hoc/__snapshots__/leaf.test.tsx.snap
@@ -0,0 +1,51 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`leafWrapper base 1`] = `
+
{
const Render = pageRendererFactory();
@@ -20,4 +21,22 @@ describe('notFountComponent', () => {
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
+});
+
+describe('loop schema', () => {
+ it('loop key', () => {
+ const Render = pageRendererFactory();
+
+ const component = renderer.create(
+ // @ts-ignore
+
,
+ );
+
+ let tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ })
})
\ No newline at end of file
diff --git a/packages/renderer-core/test/setup.ts b/packages/renderer-core/test/setup.ts
deleted file mode 100644
index a1b5e7328..000000000
--- a/packages/renderer-core/test/setup.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-jest.mock('zen-logger', () => {
- class Logger {
- log() {}
- error() {}
- warn() {}
- debug() {}
- }
- return {
- __esModule: true,
- default: Logger,
- };
-});
\ No newline at end of file
diff --git a/packages/renderer-core/test/utils/components.tsx b/packages/renderer-core/test/utils/components.tsx
new file mode 100644
index 000000000..5cb557d4b
--- /dev/null
+++ b/packages/renderer-core/test/utils/components.tsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import { Box, Breadcrumb, Form, Select, Input, Button, Table, Pagination, Dialog } from '@alifd/next';
+
+const Div = (props: any) => (
{props.children}
);
+
+const Text = (props: any) => (
{props.content}
);
+
+const SlotComponent = (props: any) => props.mobileSlot;
+
+const components = {
+ Box,
+ Breadcrumb,
+ 'Breadcrumb.Item': Breadcrumb.Item,
+ Form,
+ 'Form.Item': Form.Item,
+ Select,
+ Input,
+ Button,
+ 'Button.Group': Button.Group,
+ Table,
+ Pagination,
+ Dialog,
+ ErrorComponent: Select,
+ Div,
+ SlotComponent,
+ Text,
+};
+
+export default components;
\ No newline at end of file
diff --git a/packages/renderer-core/test/utils/node.ts b/packages/renderer-core/test/utils/node.ts
new file mode 100644
index 000000000..2756191c6
--- /dev/null
+++ b/packages/renderer-core/test/utils/node.ts
@@ -0,0 +1,55 @@
+import { PropChangeOptions } from "@ali/lowcode-designer";
+import EventEmitter from "events";
+
+export default class Node {
+ private emitter: EventEmitter;
+ schema: any = {
+ props: {},
+ };
+ hasLoop = false;
+
+ constructor(schema: any) {
+ this.emitter = new EventEmitter();
+ this.schema = schema;
+ }
+
+ mockLoop() {
+ this.hasLoop = true;
+ }
+
+ onChildrenChange(fn: any) {
+ this.emitter.on('onChildrenChange', fn);
+ return () => {
+ this.emitter.off('onChildrenChange', fn);
+ }
+ }
+
+ onPropChange(fn: any) {
+ this.emitter.on('onPropChange', fn);
+ return () => {
+ this.emitter.off('onPropChange', fn);
+ }
+ }
+
+ emitPropChange(val: PropChangeOptions) {
+ this.schema.props = {
+ ...this.schema.props,
+ [val.key + '']: val.newValue,
+ }
+ this.emitter?.emit('onPropChange', val);
+ }
+
+ onVisibleChange(fn: any) {
+ this.emitter.on('onVisibleChange', fn);
+ return () => {
+ this.emitter.off('onVisibleChange', fn);
+ }
+ }
+
+ emitVisibleChange(val: boolean) {
+ this.emitter?.emit('onVisibleChange', val);
+ }
+ export() {
+ return this.schema;
+ }
+}
\ No newline at end of file