Тесты Javascript (Jest) для проекта Semaphore CI ruby

В течение нескольких лет у меня был проект Ruby on Rails, созданный с помощью Semaphore CI. Проект Semaphore использует Ruby 2.2.2 в качестве языка. Со временем проект принял npm с browserify и babelify, и мы используем все новейшие функции ES6. Мы добавили npm install как шаг установки к нашей сборке семафора, и это работало нормально.

Теперь мы начинаем использовать Jest для тестирования наших javascripts, и это работает нормально на месте. Но когда я добавил 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, Я вошел в мою сессию CIF Семафор и обнаружил, что node v4.8.4 установлен там. Я пытался установить node v4.8.4 на моей локальной машине и с этой установленной версией я получаю те же тестовые ошибки (опубликованные выше) локально, как и на CI. Так что это проблема версии узла.

Я добавил:

"engines": {
  "node": ">= 7.1.0"
}

к моему package.json файл, но это не повлияло на версию узла, установленную на семафор.

Так что, если у меня уже есть Ruby 2.2.2 Как выбрать язык и версию в настройках сборки семафора, как изменить версию моего узла?

Заранее спасибо за помощь.

2 ответа

Решение

Похоже, что SemaphoreCI не использует ту же версию NPM, что и вы. Но вы можете установить это в настройках сборки следующим образом:

nvm install v8.9.4
npm install
npm test

Вы можете проверить это в SSH

Эрвин из Семафора здесь,

Чтобы изменить текущую версию Node.js в среде, пока выбран Ruby 2.2, добавьте nvm use 7.1 к вашим шагам настройки. Это переключится на нужную версию Node.js, и все должно работать как положено. Есть также пример этого в документах.

Свяжитесь со службой поддержки, если у вас возникнут какие-либо проблемы.

Другие вопросы по тегам