@friendsofshopware/vitest-shopware-admin-bridge

中文文档
0.2.1发布于 2026/09/07MITTypeScriptES Module构建来源已验证近 30 天下载 3534

商店软件6的Vitest桥

中文使用文档
文档目录13 节
  1. 文档
  2. 所需资源
  3. 快开始
  4. 组件测试
  5. 服务、ACL和专题旗帜
  6. 仓库双倍
  7. 二. 背景和状况
  8. 运行时间
  9. Vue 包装查询和气象器交互
  10. 严格控制台模式
  11. 兼容合同
  12. 诊断
  13. 设计边界和相容性证据

虚拟商店软件管理桥

@friendsofshopware/vitest-shopware-admin-bridge 提供 Vitest 和 Vue 测试 商店软件6管理扩展的Utils环境. 它真的穿了靴子 行政运行时间,同时保留版本敏感设置 每个扩展名.

该桥目前支持商店软件6.6和6.7. 它还探测和使用 本地商店软件设置- SFC 当更新的行政管理源树时转换 把它装上船.

文档

  • 设置新商店软件插件 覆盖本地文件 布局、第一次测试、npm锁文件、一个商店软件版 CI矩阵和一个 可选的释放艺术工作.
  • 测试最佳做法 解释测试的级别 选择、 如何隔离 Shopware 状态以及哪些助手属于 而不是桥.
  • 库存用品测试 记录上游 测试模式和桥的相容性边界.

所需资源

  • 6.6或6.7 商店软件 管理源和已安装 npm 依赖
  • 节点:22.12+、24或26+
  • npm 10+ (韩语)
  • 维特5和维特6.4+

桥在Shopware monorepo,作曲家中发现了一个行政部门 安装,或 npm administration 链接. SHOPWARE_ADMINISTRATION_PATH 遗产 ADMIN_PATH 可以覆盖发现。 发现只读: 桥从不下载或修改商店软件.

快开始

安装已公布的软件包并输入由此生成的 npm 锁文件 。 见 完整的插件设置指南 行政费 依赖性安装和CI:

npm install --save-dev vitest@5 @friendsofshopware/vitest-shopware-admin-bridge
// vitest.config.ts
import { defineShopwareConfig } from '@friendsofshopware/vitest-shopware-admin-bridge';

export default defineShopwareConfig();
{
    "scripts": {
        "test:unit": "vitest run",
        "test:unit:watch": "vitest"
    }
}

试验在下列条件下发现: src/ 财务报告和审定财务报表 test/ 使用 .spec.* 或者说 .test.*。 。 。 . 消费者选择权被合并,而不允许强制的jsdom 靴子套 替换:

export default defineShopwareConfig({
    administrationPath: process.env.SHOPWARE_ADMINISTRATION_PATH,
    runtime: {
        strictConsole: true,
    },
    vitest: {
        test: {
            include: ['tests/unit/**/*.spec.ts'],
        },
    },
});

配置安装 :

  • 正确的6.6 Vue相容性或6.7 原生 Vue 运行时间;
  • (一) 现有行政内设机构;
  • Twig、SCSS/CSS/Less和SVG处理;
  • 真正的商店软件组件、混合、指令、过滤器、状态和服务登记;
  • pinia行政当局在6.7上存放起首器和上下文,并在6.6上存放一个安全不开放的通知店,以及遗留的Vuex状态;
  • 每一次测试都有新鲜的皮尼亚和遗留的Vuex状态;
  • Vue Test Utils 插件,依赖性注射,同步本地/i18n和标准管理模拟.

全程还安装了用于常见布局的档位保留根 (单位:千美元)sw-page, (中文(简体) ), sw-card-view, (中文(简体) ), mt-card, (中文(简体) ), mt-banner, (中文(简体) ), mt-empty-state, (中文(简体) ), mt-link 财务报告和审定财务报表 sw-search-bar)外加轻量级图标根. 名称 sw-page 因此,内容和智能栏插槽仍然可见,没有 本地页面站地图.

组件测试

导入扩展切入点以注册其组件,然后挂载 商店软件组件名称 :

import { expect, it } from 'vitest';
import { mountShopwareComponent } from '@friendsofshopware/vitest-shopware-admin-bridge/test-utils';
import '../src/main';

it('renders the widget', async () => {
    const wrapper = await mountShopwareComponent('acme-widget', {
        props: { title: 'Orders' },
    });

    expect(wrapper.text()).toContain('Orders');
});

loadShopwareComponent() 扫描已安装的行政管理源,不用 写入 Shopware 的私有生成组件映射 。 允许扩展至 测试覆盖和扩展核心组件,即使其基础组件是 尚未登记。 依存在连续加载之前 Shopware.Component.build() 应用覆盖链.

生成的导入图被缓存于操作系统的临时 (原始内容存档于2017-09-25). Directory per Administration Git 修订版. 编辑时禁用缓存 选定行政源而不改变其修订:

export default defineShopwareConfig({
    runtime: { componentScanCache: false },
});

VITEST_SHOPWARE_ADMIN_BRIDGE_CACHE_DIR 可将缓存置于不同的下方 基础目录。 缓存读取和写出故障会回到新的扫描中.

Shopware.Component.override('sw-button', overrideConfig);
await loadShopwareComponent('sw-button');
const component = await buildShopwareComponent('sw-button');

可用组件公用事业:

  • loadShopwareComponent(name)
  • buildShopwareComponent(name)
  • mountShopwareComponent(name, options)
  • shallowMountShopwareComponent(name, options)
  • 直接 Vue 测试 Utils 导出 : mount, (中文(简体) ), shallowMount, (中文(简体) ), flushPromises, (中文(简体) ), config

服务、ACL和专题旗帜

默认服务模拟每次测试前重置. ACL允许默认访问, 特性标记不活动,用户配置为空,寄存器调用 返回空结果.

import {
    getShopwareTestServices,
    mockShopwareService,
    setAclRoles,
    setFeatureFlags,
    withShopwareService,
} from '@friendsofshopware/vitest-shopware-admin-bridge/test-utils';

setAclRoles(['order.viewer']);
setFeatureFlags(['FEATURE_NEXT']);

const restore = mockShopwareService('myService', { load: vi.fn() });
restore();

await withShopwareService('myService', replacement, async () => {
    // Shopware.Service('myService') and inject('myService') use replacement.
});

getShopwareTestServices().userConfigService.search.mockResolvedValue({ data: {} });

范围化服务助手更新 Shopware 的瓶装容器和 Vue 依赖性注射,然后恢复之前的确切实例。 任何未修复的 测试后自动清理范围.

仓库双倍

该桥提供小型的DAL形双人,而不是Shopware的私人 HTTP/实体-测试基础设施:

const products = createRepositoryMock({
    search: vi.fn().mockResolvedValue({
        data: [{ id: 'product-1' }],
        total: 1,
    }),
});

setRepositoryMocks({ product: products });

未配置的实体名称会立即丢出, 而不是默默返回 错误的固定.

二. 背景和状况

setShopwareContext() 更新 Shopware.Context.api 真实的 上下文/会话/系统存储。 Pinia商店使用的桥靴 6.7商店和Vuex商店在6.6商店工作:

setShopwareContext({
    api: { languageId: 'language-id' },
    session: { locale: 'de-DE', locales: ['de-DE'], languageId: 'language-id' },
});

标准 en-GB 财务报告和审定财务报表 de-DE 在扩展代码前注册了地方 运行。 通过 Shopware 的本地化工厂添加的本地化消息是同步的 之前的 Vue i18n 实例 mountShopwareComponent() 财务报告和审定财务报表 shallowMountShopwareComponent() 挂载组件 .

状态自动重设 . resetShopwareTestState() 当 单一测试需要返回默认的 API 上下文、 本地状态、 服务 和新鲜的皮尼亚明确.

运行时间

Class, API 客户端和其他非组件测试可以使用更轻的运行时间 保留商店软件上下文、 状态和服务助手但跳过管理 组件发现、组合、指令、过滤器和组件辅助器 登记:

export default defineShopwareConfig({
    runtime: { mode: 'lite' },
    vitest: {
        test: { include: ['test/core/**/*.spec.ts'] },
    },
});

当一个软件包需要两种模式时,使用单独的Vitest配置. 测试 挂载注册的商店软件组件必须继续使用默认 mode: 'full' 运行时间.

Vue 包装查询和气象器交互

桥将这些方法安装在每个 Vue 包装上,并导出为 独立函数 :

  • findByText(selector, text)
  • findByAriaLabel(selector, text)
  • findByLabel(text)
  • findByPlaceholder(text)

selectMtSelectOptionByText(wrapper, text) 覆盖反复出现的气象器选择 交互,同时接受遗留的弹出或基于角色的选项 标记.

严格控制台模式

启用 runtime.strictConsole 无法进行出乎意料的测试 console.warn 或者说 console.error允许在测试中故意输出 拥有:

allowConsoleMessage('expected deprecation', 'warn');

严格模式开始于 Shopware 拖带之后, 因此它报告测试行为 而不是初始化的噪音.

兼容合同

该桥有意将稳定的测试适配器与 Shopware 运行时分离 行为.

桥梁自有的适配器对每个受支持的行政部门的行为相同:

  • Twig 和导入的 HTML 成为 HTML 字符串; HTML 和 Twig 注释被删除 保存所有其他字节;
  • SVG 的导入包含精确的 UTF-8 文件内容 ;
  • CSS、SCSS和Less进口在单位测试中确定为空模块;
  • jsdom 多填充,寄存器双倍,查询和控制台执行使用 bridge自己的版本合同.

选定的行政部门对Vue或Vue Compat仍具有权威性, 商店的部件 和Twig运行时间工厂, 国家,服务,混合, 指令、过滤器、核心组件和本地设置-SFC转换。 这个 保持测试的API稳定,不做商店软件6.6测试 复制了 6.7 运行时的行为。 桥上没有进口商店软件的私人Twig, SVG或风格为Vite插件.

诊断

npx vitest-shopware-admin-bridge doctor
npx vitest-shopware-admin-bridge doctor --json
npx vitest-shopware-admin-bridge doctor --admin-path /path/to/administration

如果缺少依赖关系, 命令会打印精确 npm ci --prefix ... 命令。 它不会自动运行命令 .

设计边界和相容性证据

见 文件/测试-库存 用于商店软件测试 模式库存、帮助者所有权决定、缺口关闭表和可执行文件 证明每个兼容行为.

版本与发布记录

@friendsofshopware/vitest-shopware-admin-bridge 共发布 5 个版本,首次发布于 2026/08/26;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.1latest2026/09/072 个月前
0.1.32026/08/262 个月前
0.1.22026/08/262 个月前
0.1.12026/08/262 个月前
0.1.02026/08/262 个月前

关于 @friendsofshopware/vitest-shopware-admin-bridge 的常见问题

@friendsofshopware/vitest-shopware-admin-bridge 是什么?

商店软件6的Vitest桥

如何安装 @friendsofshopware/vitest-shopware-admin-bridge?

在项目目录运行 npm install @friendsofshopware/vitest-shopware-admin-bridge,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:vite(^6.4.0 || ^7.0.0 || ^8.0.0)、vitest(^5.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 vitest-shopware-admin-bridge,可以用 npx vitest-shopware-admin-bridge 直接运行。

@friendsofshopware/vitest-shopware-admin-bridge 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@friendsofshopware/vitest-shopware-admin-bridge 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@friendsofshopware/vitest-shopware-admin-bridge 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^22.12.0 || ^24.0.0 || >=26.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@friendsofshopware/vitest-shopware-admin-bridge 可以商用吗?

@friendsofshopware/vitest-shopware-admin-bridge 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@friendsofshopware/vitest-shopware-admin-bridge 的下载量有多少?

根据 npm 官方下载统计,@friendsofshopware/vitest-shopware-admin-bridge 在 2026/10/16 – 2026/11/14 这 30 天内被下载 3,534 次,日均约 118 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@friendsofshopware/vitest-shopware-admin-bridge 还在维护吗?

最新版本 0.2.1 发布于 2026/09/07(2 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/08/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。