For AI agents: the complete documentation index is available at /next/zh/llms.txt, the full documentation bundle is available at /next/zh/llms-full.txt, and this page is available as Markdown at /next/zh/api/packages/testing-environment/index.md.
Lynx
  • 简体中文
  • @lynx-js/testing-environment

    npm · Source · Changelog

    @lynx-js/testing-environment 是 Lynx Spec 的纯 JavaScript 实现,主要覆盖 Element PAPI 和双线程模型,供 Node.js 使用。总体目标是模拟出足以用于测试的 Lynx 环境子集。

    Element PAPI 的实现基于 jsdom,例如 __CreateElement 返回的 LynxElement 继承自 jsdom 的 HTMLElement。因此你可以复用常见的 DOM 测试工具,比如 @testing-library/dom(DOM 查询)和 @testing-library/jest-dom(DOM 相关的自定义 jest matcher)等。

    Usage

    import { LynxTestingEnv } from '@lynx-js/testing-environment';
    import { JSDOM } from 'jsdom';
    
    const lynxTestingEnv = new LynxTestingEnv({ window: new JSDOM().window });

    使用 @lynx-js/testing-environment 时,主要用到包里具名导出的 LynxTestingEnv 构造函数。它返回一个 LynxTestingEnv 实例,实例上有若干有用的方法和属性,其中 switchToMainThread 和 switchToBackgroundThread 可以在主线程和后台线程之间切换。

    使用后台线程 API:

    lynxTestingEnv.switchToBackgroundThread();
    // use the background thread global object
    globalThis.lynxCoreInject.tt.OnLifecycleEvent(...args);
    // or directly use `lynxCoreInject` since it's already injected to `globalThis`
    // lynxCoreInject.tt.OnLifecycleEvent(...args);

    使用主线程 API:

    lynxTestingEnv.switchToMainThread();
    // use the main thread Element PAPI
    const page = __CreatePage('0', 0);
    const view = __CreateView(0);
    __AppendElement(page, view);

    注意,不切换线程也仍然可以访问另一个线程的全局变量:

    lynxTestingEnv.switchToMainThread();
    // use the `backgroundThread` global object even though we're on the main thread
    lynxTestingEnv.backgroundThread.tt.OnLifecycleEvent(...args);

    Use in Vitest

    推荐把它配置为 Vitest 的测试环境,例如:

    // vitest.config.js
    import { defineConfig } from 'vitest/config';
    
    export default defineConfig({
      test: {
        environment: require.resolve(
          '@lynx-js/testing-environment/env/vitest',
        ),
      },
    });

    配置完成后,就可以在测试中直接通过全局变量访问 lynxTestingEnv 对象。

    如果你是在 ReactLynx 中用 @lynx-js/testing-environment 做单元测试,通常不需要手动指定这项配置。

    参见 ReactLynx Testing Library,从 @lynx-js/react/testing-library 继承相关配置。

    Use in Rstest

    如果你的测试运行器已经通过 jsdom 提供了全局 window,可以这样加载共享的 Lynx 测试环境:

    import '@lynx-js/testing-environment/env/rstest';

    Credits

    鸣谢:

    • jsdom,提供了纯 JavaScript 的 DOM API 实现。

    Lynx 规范 的纯 JavaScript 实现,主要实现了 Element PAPI 和 双线程模型,用于在 Node.js 中使用。

    类

    接口

    类型别名

    函数

    除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。