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

Svelte项目Jest测试时Tailwind带focus等修饰符的类报错如何解决?

问题原因

你的本地开发环境运行时会正常调用svelte-preprocess处理PostCSS语法,但是Jest调用的svelte-jester默认没有开启预处理流程,导致Svelte原生CSS解析器无法识别Tailwind带:修饰符的@apply语法,误以为语法错误抛出提示。

解决步骤

步骤1:安装postcss-nested依赖

Tailwind的修饰符语法需要postcss-nested插件提前解析,避免Svelte把focus:识别为原生CSS伪类语法:

npm install -D postcss-nested

步骤2:修改postcss.config.js配置

把postcss-nested加到Tailwind插件之前加载:

const tailwindcss = require("tailwindcss");
const autoprefixer = require("autoprefixer");
const cssnano = require("cssnano");
const postcssNested = require("postcss-nested");

const mode = process.env.NODE_ENV;
const dev = mode === "development";

const config = {
    plugins: [
        postcssNested(),
        tailwindcss(),
        autoprefixer(),
        !dev && cssnano({
            preset: "default",
        })
    ],
};

module.exports = config;

步骤3:修改package.json中的Jest配置

开启svelte-jester的预处理功能,让它自动读取svelte.config.js里的PostCSS配置处理样式:

"jest": {
    "transform": {
        "^.+\\.svelte$": ["svelte-jester", { "preprocess": true }],
        "^.+\\.js$": "babel-jest"
    }
}

步骤4:补充测试环境变量(可选,针对JIT模式不生效的情况)

如果你使用Tailwind JIT模式测试时出现样式丢失,修改test脚本设置NODE_ENV:

"scripts": {
    "test": "NODE_ENV=test jest --watchAll"
}

Windows系统用户可以先安装cross-env:

npm install -D cross-env

再修改test脚本:

"test": "cross-env NODE_ENV=test jest --watchAll"

验证

删除node_modules/.cache目录后重新运行测试,报错即可消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:54:04