diff --git a/packages/components/menu/__tests__/head-menu.test.tsx b/packages/components/menu/__tests__/head-menu.test.tsx
index 2ec7ee5c36..a99cb0d8e0 100644
--- a/packages/components/menu/__tests__/head-menu.test.tsx
+++ b/packages/components/menu/__tests__/head-menu.test.tsx
@@ -1,5 +1,6 @@
import { mount } from '@vue/test-utils';
-import { HeadMenu } from '@tdesign/components/menu';
+import { defineComponent } from 'vue';
+import { HeadMenu, MenuItem } from '@tdesign/components/menu';
// every component needs four parts: props/events/slots/functions.
describe('HeadMenu', () => {
@@ -52,4 +53,41 @@ describe('HeadMenu', () => {
expect(wrapper.element).toMatchSnapshot();
});
});
+
+ describe('JSX rendering', () => {
+ it('should not warn about slot invoked outside of render function when using JSX with dynamic MenuItems', () => {
+ const warnSpy = vi.spyOn(console, 'warn');
+ const menuOptions = [
+ { label: '用户信息', key: 'info' },
+ { label: '身份验证', key: 'security' },
+ ];
+
+ const MenuComponent = defineComponent({
+ setup() {
+ return () => (
+