首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入css时jest意外标记

导入css时jest意外标记
EN

Stack Overflow用户
提问于 2019-02-11 17:04:37
回答 3查看 15.7K关注 0票数 24

我得到了SyntaxError: Unexpected token .的错误

在我的代码中

代码语言:javascript
复制
import 'react-dates/lib/css/_datepicker.css'
代码语言:javascript
复制
import 'semantic-ui-css/semantic.min.css'

这些不在我的spec.js中,但在我的实现代码中,你知道为什么吗?我运行我的应用程序没有问题,但当我尝试运行测试时出现jest抛出错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-12 17:38:36

问题是Jest正在处理这些CSS导入,并试图像解析JavaScript一样解析它们。

“意想不到的标记。”消息可能是因为它阻塞的文件的第一行是CSS类声明,即.datepicker: { ... }

无论如何,正如在this answer中指出的,解决这个问题的方法是创建一个包含导出空对象的模块的文件。我管我的名字叫styleMock.js

代码语言:javascript
复制
module.exports = {};

然后,您需要在项目根目录中创建一个jest.config.js文件,并添加:

代码语言:javascript
复制
module.exports = {
  moduleNameMapper: {
    '\\.(css|less)$': '<rootDir>/test/jest/__mocks__/styleMock.js',
  }
};

moduleNameMapper设置告诉Jest如何解释具有不同扩展名的文件。在这种情况下,我们只需要将它指向我们刚刚创建的空文件。显然,请相应地调整文件的路径。

请注意,您可以扩展上面的正则表达式,以获得所需的任何文件结尾。我的看起来是这样的:

代码语言:javascript
复制
moduleNameMapper: {
  '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
    '<rootDir>/test/jest/__mocks__/fileMock.js',
  '\\.(css|less)$': '<rootDir>/test/jest/__mocks__/styleMock.js',
},

其中fileMock.jsstyleMock.js相同

或者,您可以使用诸如jest-transform-stub之类的模块,它可以为您做同样的事情。

票数 51
EN

Stack Overflow用户

发布于 2020-11-05 07:17:21

对于在2020年秋季或以后遇到这个问题的任何人来说,对于像SyntaxError: Invalid or unexpected token 当Jest解析CSS文件:True时出现的错误,错误是由于Jest试图将CSS解析为JavaScript造成的,这是不起作用的。因此,更新后的方法是针对Jest documentation on handling static assets的3个步骤,但您不需要像@chitra建议的那样添加像identity-obj-proxy这样的额外包,除非您正在使用CSS Modules。与@james-hibbard的建议形成对比的是:fileMock.js现在看起来略有不同,你不需要创建一个jest.config.js

1在您的package.json中添加以下内容

代码语言:javascript
复制
{
  "jest": {
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
    }
  }
}

2然后创建以下两个文件:

代码语言:javascript
复制
// __mocks__/styleMock.js

module.exports = {};

3.

代码语言:javascript
复制
// __mocks__/fileMock.js

module.exports = 'test-file-stub';

当Jest像这样运行时,应该可以修复这些特定的错误

代码语言:javascript
复制
SyntaxError: Invalid or unexpected token
> 1 | import '../src/css/console.scss';
票数 15
EN

Stack Overflow用户

发布于 2019-12-11 17:56:07

Jest不适用于导入CSS的JSX。

我通过在package.json文件的jest配置中使用moduleNameMapper键解决了这个问题。

代码语言:javascript
复制
{
   "jest":{
        "moduleNameMapper":{
             "\\.(css|less|scss|sass)$": "identity-obj-proxy" 
        }
   }
}

但是您将需要安装identity-obj-proxy包作为开发依赖项,即

代码语言:javascript
复制
yarn add identity-obj-proxy -D
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54627028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档