You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AVA结合JSDOM测试报错:无法设置仅含getter的window属性

解决AVA配合JSDOM测试全局document依赖方法的问题

问题背景

测试依赖全局document和window的blurActiveElement方法时,直接给globalThis.window赋值触发错误:

TypeError: Cannot set property window of # which has only a getter

原因是AVA运行环境中globalThis.window为只读属性,无法直接覆盖赋值。

解决方案

改用JSDOM提供的globalize()方法,自动将DOM环境的全局变量(如window、document、HTMLElement等)挂载到Node.js的globalThis上,无需手动逐个赋值。

修改后的完整测试代码:

import test from 'ava';
import { JSDOM } from 'jsdom';
import { blurActiveElement } from '.';

test.before(() => {
    const dom = new JSDOM('<!DOCTYPE html><html><head></head><body><div id="my-element-id"></div></body></html>');
    // 自动挂载DOM环境全局变量到globalThis
    dom.window.globalize();
});

test('blurActiveElement 可正确失焦当前活跃元素', (t) => {
    const el = document.getElementById('my-element-id');
    el.focus();
    t.is(document.activeElement, el, '元素应成为当前活跃元素');
    blurActiveElement();
    t.not(document.activeElement, el, '调用方法后元素不再是活跃元素');
});

补充说明

  • globalize()方法会自动处理所有DOM相关全局变量,无需手动设置document、HTMLElement等属性;
  • 给断言添加描述文本,可提升测试报告的可读性。

内容的提问来源于stack exchange,提问作者ar099968

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:10:01