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

Angular 16集成Jest测试时无法找到variables.scss的解决方案求助

Angular Jest实验性构建器SCSS导入路径问题解决方案

我在现有项目中引入Angular对Jest的实验性支持(@angular-devkit/build-angular:jest)后,执行npm test时项目构建正常,但测试报错:

✘ [ERROR] Can't find stylesheet to import. ╷ 1 │ @import "_variables.scss";

尝试添加stylePreprocessorOptions配置(该配置仅适用于Jasmine构建器)无效,以下是几种可行的解决办法:

方法一:配置Jest的moduleNameMapper

创建或修改项目根目录下的jest.config.js,通过moduleNameMapper映射SCSS文件路径,让Jest能正确识别导入的样式文件:

module.exports = {
  preset: 'jest-preset-angular',
  moduleNameMapper: {
    // 直接映射单个变量文件
    '^_variables\\.scss$': '<rootDir>/src/shared/_variables.scss',
    // 批量映射shared目录下所有SCSS文件(按需调整)
    '^@shared/(.*)\\.scss$': '<rootDir>/src/shared/$1.scss'
  },
  setupFilesAfterEnv: ['<rootDir>/src/setup-jest.ts']
};

注:Angular 16+版本的Jest预设通常为jest-preset-angular,确保配置与项目版本兼容。

方法二:全局导入样式变量文件

在测试初始化文件(如src/setup-jest.ts)中全局导入SCSS变量文件,确保所有测试用例都能访问到这些变量:

import './shared/_variables.scss';
// 其他测试初始化代码(如Zone.js相关配置)

同时在angular.json的test配置中指定该初始化文件:

"test": {
  "builder": "@angular-devkit/build-angular:jest",
  "options": {
    "polyfills": [
      "zone.js",
      "zone.js/testing"
    ],
    "tsConfig": "tsconfig.spec.json",
    "setupFilesAfterEnv": ["src/setup-jest.ts"]
  }
}

方法三:修改SCSS导入为相对路径

如果不想调整配置,可以直接将SCSS中的导入语句改为相对路径(根据当前文件位置调整层级):

// 原导入语句
@import "_variables.scss";
// 修改为相对路径
@import "../shared/_variables.scss";

该方法直接但维护成本较高,适合样式文件引用较少的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:34:51