Javascript (Jest) 测试 Semaphore CI ruby 项目
Javascript (Jest) tests on Semaphore CI ruby project
几年来,我在 Rails 项目上使用 Semaphore CI 建立了一个 Ruby。 Semaphore 项目设置为使用 Ruby 2.2.2 作为它的语言。随着时间的推移,该项目采用了带有 browserify 和 babelify 的 npm,我们正在使用所有最新的 ES6 功能。我们添加了 npm install
作为信号量构建的设置步骤,这工作正常。
现在我们开始使用 Jest 来测试我们的 javascript,这在本地运行良好。但是当我将 npm test
添加到我们的信号量测试命令时,npm test
在信号量 CI 上失败并出现以下错误:
FAIL app/assets/javascripts/tests/selectors/conversations.test.js
● Test suite failed to run
SyntaxError: Unexpected token {
at _load_jsdom (node_modules/jest/node_modules/jest-cli/node_modules/jest-environment-jsdom/build/index.js:17:41)
FAIL app/assets/javascripts/tests/reducers/conversations.test.js
● Test suite failed to run
SyntaxError: Unexpected token {
at _load_jsdom (node_modules/jest/node_modules/jest-cli/node_modules/jest-environment-jsdom/build/index.js:17:41)
Test Suites: 2 failed, 2 total
Tests: 0 total
Snapshots: 0 total
Time: 0.65s
Ran all test suites.
npm ERR! Test failed. See above for more details.
这是项目的一些相关信息 package.json
:
"scripts": {
"test": "jest --debug --verbose"
},
"jest": {
"roots": [
"<rootDir>/app/assets/javascripts"
]
},
"dependencies": {
"babel-plugin-syntax-async-functions": "^6.3.13",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-regenerator": "^6.3.18",
"babel-polyfill": "^6.3.14",
"babel-preset-env": "^1.5.2",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2016": "^6.24.1",
"babel-preset-es2017": "^6.24.1",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"babelify": "^7.2.0",
"browserify": "^14.0.0",
"browserify-incremental": "^3.1.0",
"es6-promise": "^3.0.2",
"fetch": "^0.3.6"
},
"devDependencies": {
"babel-core": "^6.26.0",
"babel-jest": "^22.1.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"bootstrap": "^4.0.0-beta.3",
"browserify": "^14.4.0",
"browserify-incremental": "^3.1.1",
"jest": "^22.1.1"
}
这是项目中的 .babelrc
文件:
{
"presets": ["env", "es2015", "es2016", "es2017", "stage-0", "react"]
}
在本地,我在 node v7.10.0
。我通过 SSH 进入了我的 Semaphore CI 会话,发现那里安装了 node v4.8.4
。我尝试在我的本地机器上安装 node v4.8.4
并安装了那个版本,我在本地得到了与我在 CI 上相同的测试错误(上面发布的)。所以这是节点版本问题。
我补充了:
"engines": {
"node": ">= 7.1.0"
}
我的 package.json
文件,但这并不影响安装在 Semaphore 上的节点版本。
所以如果我已经在信号量构建设置中选择 Ruby 2.2.2
作为我的语言和版本,我该如何更改我的节点版本?
在此先感谢您的帮助。
看起来 SemaphoreCI 使用的 NPM 版本与您不同。但是你可以像这样在构建设置中设置它:
nvm install v8.9.4
npm install
npm test
您可以在 SSH 中测试它
这里是 Semaphore 的 Ervin,
要更改环境中的当前 Node.js 版本,同时选择 Ruby 2.2,将 nvm use 7.1
添加到您的设置步骤。这将切换到所需的 Node.js 版本,一切都应该按预期工作。文档中还有 an example of this。
如果您 运行 遇到任何问题,请联系支持人员。
几年来,我在 Rails 项目上使用 Semaphore CI 建立了一个 Ruby。 Semaphore 项目设置为使用 Ruby 2.2.2 作为它的语言。随着时间的推移,该项目采用了带有 browserify 和 babelify 的 npm,我们正在使用所有最新的 ES6 功能。我们添加了 npm install
作为信号量构建的设置步骤,这工作正常。
现在我们开始使用 Jest 来测试我们的 javascript,这在本地运行良好。但是当我将 npm test
添加到我们的信号量测试命令时,npm test
在信号量 CI 上失败并出现以下错误:
FAIL app/assets/javascripts/tests/selectors/conversations.test.js
● Test suite failed to run
SyntaxError: Unexpected token {
at _load_jsdom (node_modules/jest/node_modules/jest-cli/node_modules/jest-environment-jsdom/build/index.js:17:41)
FAIL app/assets/javascripts/tests/reducers/conversations.test.js
● Test suite failed to run
SyntaxError: Unexpected token {
at _load_jsdom (node_modules/jest/node_modules/jest-cli/node_modules/jest-environment-jsdom/build/index.js:17:41)
Test Suites: 2 failed, 2 total
Tests: 0 total
Snapshots: 0 total
Time: 0.65s
Ran all test suites.
npm ERR! Test failed. See above for more details.
这是项目的一些相关信息 package.json
:
"scripts": {
"test": "jest --debug --verbose"
},
"jest": {
"roots": [
"<rootDir>/app/assets/javascripts"
]
},
"dependencies": {
"babel-plugin-syntax-async-functions": "^6.3.13",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-regenerator": "^6.3.18",
"babel-polyfill": "^6.3.14",
"babel-preset-env": "^1.5.2",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2016": "^6.24.1",
"babel-preset-es2017": "^6.24.1",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"babelify": "^7.2.0",
"browserify": "^14.0.0",
"browserify-incremental": "^3.1.0",
"es6-promise": "^3.0.2",
"fetch": "^0.3.6"
},
"devDependencies": {
"babel-core": "^6.26.0",
"babel-jest": "^22.1.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"bootstrap": "^4.0.0-beta.3",
"browserify": "^14.4.0",
"browserify-incremental": "^3.1.1",
"jest": "^22.1.1"
}
这是项目中的 .babelrc
文件:
{
"presets": ["env", "es2015", "es2016", "es2017", "stage-0", "react"]
}
在本地,我在 node v7.10.0
。我通过 SSH 进入了我的 Semaphore CI 会话,发现那里安装了 node v4.8.4
。我尝试在我的本地机器上安装 node v4.8.4
并安装了那个版本,我在本地得到了与我在 CI 上相同的测试错误(上面发布的)。所以这是节点版本问题。
我补充了:
"engines": {
"node": ">= 7.1.0"
}
我的 package.json
文件,但这并不影响安装在 Semaphore 上的节点版本。
所以如果我已经在信号量构建设置中选择 Ruby 2.2.2
作为我的语言和版本,我该如何更改我的节点版本?
在此先感谢您的帮助。
看起来 SemaphoreCI 使用的 NPM 版本与您不同。但是你可以像这样在构建设置中设置它:
nvm install v8.9.4
npm install
npm test
您可以在 SSH 中测试它
这里是 Semaphore 的 Ervin,
要更改环境中的当前 Node.js 版本,同时选择 Ruby 2.2,将 nvm use 7.1
添加到您的设置步骤。这将切换到所需的 Node.js 版本,一切都应该按预期工作。文档中还有 an example of this。
如果您 运行 遇到任何问题,请联系支持人员。