SyntaxError:无效或意外的令牌@import

Har*_*lue 2 reactjs webpack jestjs enzyme

我正在尝试将Jest和Enzyme添加到React webpack项目中.

一切正常,直到我将测试添加到组件,并使用样式表导入谷歌字体.

我得到的错误是:

? Test suite failed to run
    /Users/dev/Code/Git/react-redux-webpack/src/App.sass:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){@import url('https://fonts.googleapis.com/css?family=Barlow+Condensed')
                                                                                             ^
    SyntaxError: Invalid or unexpected token
Run Code Online (Sandbox Code Playgroud)

sass文件看起来像:

@import url('https://fonts.googleapis.com/css?family=Barlow+Condensed')

body
    background: #f9f9f9
    color: #444444
    font-family: 'Barlow Condensed', sans-serif
    text-align: center

.container
    width: 100%
    max-width: 960px
    margin: 0 auto

.container__logo--image
    position: absolute
    top: 50%
    left: 50%
    margin-left: -75px
    margin-top: -75px
Run Code Online (Sandbox Code Playgroud)

我的.babelrc:

{
  "presets": [
    "react",
    "stage-0",
    [
      "env",
      {
        "targets": {
          "node": "6.10",
          "browsers": ["last 2 versions", "safari >= 7"]
        }
      }
    ]
  ],
  "plugins": ["transform-class-properties"]
}
Run Code Online (Sandbox Code Playgroud)

我在webpack中拥有所有必需的加载器,我可以整天构建和服务sass而没有任何问题.这是我正在努力的Jest的介绍.

我已经在这里推出了一个具有当前代码状态的分支https://github.com/nombienombie/react-redux-webpack/tree/feature/jest-unit-tests

Har*_*lue 7

我在package.json中添加了以下内容:

  "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|sass)$": "<rootDir>/__mocks__/styleMock.js"
    }
  },
Run Code Online (Sandbox Code Playgroud)

并在mocks文件夹中添加以下内容:

fileMock.js

module.exports = 'test-file-stub';
Run Code Online (Sandbox Code Playgroud)

styleMock.js

module.exports = {}
Run Code Online (Sandbox Code Playgroud)


And*_*aro 5

由于它们不是由 Webpack 编译的,因此测试导入的静态资源应该以某种方式进行处理。

典型的方法包括模拟它们,因为与测试目的无关。Jest 公开了一个moduleNameMapper可以轻松模拟/代理它们的选项。


小智 5

在@Harry给出的答案上还要补充一件事,

如果您正在使用jest.config.js文件,则添加它而不是package.json

  moduleNameMapper: {
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/src/__mock__/fileMock.js',
    '\\.(css|less)$': '<rootDir>/src/__mock__/styleMock.js',
  },

Run Code Online (Sandbox Code Playgroud)