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

Angular应用中使用UIKit触发Jest测试报错:ReferenceError: CSS is not defined

解决Angular+Jest环境下UIkit依赖浏览器API的测试报错问题

版本信息

  • Angular ~16.2.0
  • Jest ^29.4.1
  • UIKit ^3.17.8
  • Node 20.10.0
  • NPM 10.2.5

问题描述

运行测试套件时,因Node环境无法访问浏览器CSS API(如getComputedStyle),调用UIkit.default.modal('#welcome-modal').show()时出现报错:
报错截图

解决方案

1. 模拟缺失的浏览器CSS API

在Jest的全局设置文件(如setup-jest.ts)或单个测试文件顶部添加以下代码,模拟getComputedStyle方法:

// 模拟浏览器的getComputedStyle API
Object.defineProperty(window, 'getComputedStyle', {
  value: () => ({
    getPropertyValue: () => '', // 返回空字符串或UIkit需要的默认值
  }),
});

如果使用全局设置文件,需要在jest.config.js中配置setupFilesAfterEnv指向该文件:

module.exports = {
  setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
  // 其他配置项
};

2. 直接模拟UIkit模块

跳过加载真实UIkit,在组件测试文件中mock整个模块,避免执行依赖浏览器环境的代码:

// 在组件测试文件顶部添加
jest.mock('uikit', () => ({
  default: {
    modal: jest.fn().mockReturnValue({
      show: jest.fn() // 模拟show方法,方便后续断言调用
    })
  }
}));

这样测试时调用UIkit的modal方法只会执行mock函数,不会触发真实的浏览器API依赖逻辑。

3. 确保Jest使用jsdom环境

检查jest.config.js中是否配置了testEnvironment: 'jsdom',Angular组件测试需要DOM环境支持:

module.exports = {
  testEnvironment: 'jsdom',
  // 其他配置项如preset: 'jest-preset-angular'等
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:57:17