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

如何在NextJS 15快照测试中阻止动态CSS类生成?

Next.js 15 中阻止 styled-jsx 动态 CSS 类出现在 RTL 快照的解决方案

Next.js 15 对 styled-jsx 的内部模块结构做了调整,导致旧版 mock 方案失效。以下是适配新版本的修复步骤:

1. 重构 Mock 文件

创建/更新 __mocks__/styled-jsx/css.js,确保导出的 API 与新版 styled-jsx 完全对齐:

const css = () => '';
css.resolve = () => ({ className: '', styles: '' });
css.global = () => '';
css.default = css;

export { css };
export default css;

若你的项目直接从 styled-jsx 根模块导入 css,需额外创建 __mocks__/styled-jsx/index.js:

export const css = () => '';
css.resolve = () => ({ className: '', styles: '' });
css.global = () => '';

export default { css };

2. 更新 Jest 配置

修改 jest.config.js 中的 moduleNameMapper,替换原有的 css 文件匹配规则,改为精准匹配 styled-jsx 的模块路径:

const jestConfig = {
  moduleNameMapper: {
    '^styled-jsx/css$': '<rootDir>/__mocks__/styled-jsx/css.js',
    '^styled-jsx$': '<rootDir>/__mocks__/styled-jsx/index.js',
    // 保留其他原有映射规则...
  },
  // 其他 Jest 配置项...
};

export default jestConfig;

3. 特殊场景处理(可选)

如果快照中仍出现动态类,检查测试文件是否使用了 styled-jsx 的其他导出(如 StyleSheet),需在 mock 文件中补充对应空实现:

// 在 __mocks__/styled-jsx/index.js 中添加
export const StyleSheet = { create: () => ({}) };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:37:44