为什么我的开玩笑测试是在本地运行,而不是在Travis上运行?

jha*_*amm 6 javascript import travis-ci

我有一个简单的javascript项目,使用ES6,加​​上importexport.这是我的.babelrc档案

{
  "env": {
    "es": {
      "presets": [
        [
          "env",
          {
            "targets": {
              "browsers": ["last 2 versions"],
              "node": "current"
            },
            "modules": false
          }
        ]
      ],
      "ignore": ["**/*.test.js", "**/tests/*"]
    },
    "test": {
      "presets": ["env"]
    },
    "cjs": {
      "presets": [
        [
          "env",
          {
            "targets": {
              "browsers": ["last 2 versions"],
              "node": "current"
            }
          }
        ]
      ],
      "ignore": ["**/*.test.js", "**/tests/*"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我运行我的测试npm test,它运行我的命令package.json:"test": "jest --notify".

在本地,一切都运行良好,我的所有测试都通过了,但是当我推到特拉维斯时,我得到了这个错误:SyntaxError: Unexpected token import.它不承认我的import陈述.

这是我的.travis.yml:

language: node_js
cache:
  yarn: true
node_js:
- '8.4'
script:
- npm test
env:
- NODE_ENV: feature/travis
Run Code Online (Sandbox Code Playgroud)

为什么我.babelrc不在特拉维斯工作?我错过了什么?

moo*_*ard 3

这很可能发生,因为您已经NODE_ENV: feature/travistravis.yml. 这将导致 Travis 将您的测试作为NODE_ENV=feature/travis jest --notify.

这通常不会引起关注,但如果尚未设置,jest则会自动将 NODE_ENV 设置为。test

您的问题可能与https://github.com/facebook/jest/issues/3370上进行的讨论类似。关于 Jest 是否应该自动设置NODE_ENVtotest或者是否应该development在不存在NODE_ENV的情况下使用(或者如果全局设置则尊重NODE_ENV已经设置的内容)存在一些争论。

您还可以在jest-cli https://github.com/facebook/jest/blob/master/packages/jest-cli/bin/jest.js#L12-L14中看到此逻辑

所以我的建议是在没有你的NODE_ENV设置的情况下测试它travis.yml,看看它是否成功运行所有测试。