【问题标题】:How can I use jest coverage in Next.js styled-jsx?如何在 Next.js styled-jsx 中使用 jest 覆盖?
【发布时间】:2020-05-13 12:25:29
【问题描述】:

我正在尝试将测试框架 Jest 与 Next.js 和 styled-jsx 一起使用。

这是我的外部 css 样式。

import css from 'styled-jsx/css';

export const TextStyle = css`
     p {
         font-size: 14px;
         color: #a8a8a8;
     }
`;

这是我的 package.json 脚本。效果很好。

"test": "jest --verbose",

我想使用覆盖选项。所以我尝试了这个"test": "jest --coverage --verbose",但它不起作用。

ReferenceError: css 未定义

我已阅读此https://github.com/zeit/styled-jsx/issues/436。但是,问题仍然存在,对我没有帮助。

我该如何解决?

【问题讨论】:

  • 不直接回答问题,但可能仍然有用,请查看 github.com/UnlyEd/next-right-now,这是一个 Next.js 样板,内置 Jest。它使用 Emotion 而不是 styled-jsx。

标签: reactjs jestjs next.js styled-jsx


【解决方案1】:

styled-jsxdocs 提到如何解决它,但这对我来说效果不佳。

我通过执行以下操作使其工作: 像这样将package.json 测试脚本中的节点环境设置为“test”(如果需要,也可以添加--verbose 标志):

    "test": "NODE_ENV=test jest",
    "test:coverage": "NODE_ENV=test jest --coverage"

在您的 babel 配置中(在我的情况下为 .babelrc)将 babel-test: true 添加到 test 环境配置中,如下所示(有关更多详细信息,请参阅 Next docs):

{
  // this is your original config, it's required if you don't have a babel config yet and are using `Next` since `Next` normally does it under the hood for you:
  "presets": [
    [
      "next/babel",
    ]
  ],
  // this is what you're adding:
  "env": {
    "test": {
      "presets": [
        [
          "next/babel",
          {
            "styled-jsx": {
              "babel-test": true
            }
          }
        ]
      ]
    }
  }
}

您的测试现在应该通过了,但可能会显示警告: styled-jsx/css: if you are getting this error it means that your css tagged template literals were not transpiled.

在这种情况下,您应该为 styled-jsx/css 添加一个 jest 自动模拟,方法是从项目的根目录添加一个具有此确切路径的新文件(__mocks__ 文件夹必须是node_modules 文件夹的兄弟姐妹)/__mocks__/styled-jsx/css.js

function css() {
  return ""
}

module.exports = css

*注意:整个设置的作用是在您运行测试时禁用 styled-jsx 转换,这意味着生成的类不会在您的测试组件中生成。例如,在我的情况下,这会破坏我的测试,因为我依赖生成的类来隐藏某些元素,而我的测试依赖于隐藏的那些元素。我现在正在想办法解决这个问题,但在你的情况下这可能不是问题。

【讨论】:

  • 解决了这个问题,就像你在下面说的那样制作模拟 css 函数。感谢您的评论
猜你喜欢
  • 2021-11-30
  • 2019-07-29
  • 2020-09-10
  • 2019-07-21
  • 1970-01-01
  • 2021-09-07
  • 2019-11-25
  • 2019-10-15
  • 1970-01-01
相关资源
最近更新 更多