Jest не определен в Travis CI при развертывании Docusaurus v2 на страницах GitHub - PullRequest
1 голос
/ 17 марта 2020

В настоящее время я работаю над настройкой сайта Docusaurus v2 на страницах GitHub. Я написал свои собственные тесты Jest и Enzyme для своих компонентов. В настоящее время Jest указан как devDependency, а мой .travis.yml выглядит следующим образом:

# .travis.yml
language: node_js
node_js:
  - '10'
branches:
  only:
    - master
cache:
  npm: true
install:
  npm i
script:
  - git config --global user.name "${GH_NAME}"
  - git config --global user.email "${GH_EMAIL}"
  - echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc
  - npm t && GIT_USER="${GH_NAME}" npm run deploy

Я обновил раздел package.json scrips для вызова jest относительно node_modules, например так:

"test": "cross-env NODE_ENV=test ./node_modules/jest/bin/jest.js --detectOpenHandles"

В travis все работает отлично, и я вижу, что все мои тесты пройдены. У меня возникает проблема, когда он пытается развернуть сайт на страницах GitHub, как видно из последней строки раздела scripts в .travis.yml: npm t && GIT_USER="${GH_NAME}" npm run deploy. Впоследствии я получаю следующую ошибку:

ReferenceError: jest is not defined
(undefined) ReferenceError: jest is not defined
    at Module.module.exports.Object.defineProperty.value (main:26124:1)
    at __webpack_require__ (main:21:30)
    at Promise.resolve.then (main:79206:682)
Error: Failed to compile with errors.
    at compiler.run (/home/travis/build/myorg/myrepository/node_modules/@docusaurus/core/lib/commands/build.js:37:24)
    at finalCallback (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/MultiCompiler.js:254:12)
    at runWithDependencies.err (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/MultiCompiler.js:277:6)
    at done (/home/travis/build/myorg/myrepository/node_modules/neo-async/async.js:2931:13)
    at runCompilers (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/MultiCompiler.js:181:48)
    at err (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/MultiCompiler.js:188:7)
    at compiler.run (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/MultiCompiler.js:270:7)
    at finalCallback (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/Compiler.js:257:39)
    at hooks.done.callAsync.err (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/Compiler.js:273:13)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/travis/build/myorg/myrepository/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:42:1)
    at AsyncSeriesHook.lazyCompileHook (/home/travis/build/myorg/myrepository/node_modules/tapable/lib/Hook.js:154:20)
    at onCompiled (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/Compiler.js:271:21)
    at hooks.afterCompile.callAsync.err (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/Compiler.js:681:15)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/travis/build/myorg/myrepository/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (/home/travis/build/myorg/myrepository/node_modules/tapable/lib/Hook.js:154:20)
    at compilation.seal.err (/home/travis/build/myorg/myrepository/node_modules/webpack/lib/Compiler.js:678:31)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! my-repository@1.0.0 deploy: `docusaurus deploy`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the my-repository@1.0.0 deploy script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Возможно, я ошибаюсь, но я считаю, что это потому, что мои тесты развертываются как часть кодовой базы и, поскольку jest является devDependency, он не существует в этом сцена; следовательно, webpack не может найти его, когда он используется в моих *.spec.js файлах, то есть jest.mock(...). Поэтому, добавив шутку как нормальную зависимость, я думаю, это можно исправить, хотя, как вы понимаете, это не идеальный и не правильный подход. Для справки у меня нет моих тестовых файлов в __TESTS__ или какой-либо форме тестового каталога. Поскольку я следовал шаблону контейнера, все мои файлы spe c соседствуют с тем, что они тестируют. Структура которого похожа на это:

components
  - Header
    - HeaderComponent.js
    - HeaderComponent.spec.js
    - HeaderContainer.js
    - HeaderContainer.spec.js
    - Header.module.css

Быстрый sidenote: Не все мои компоненты имеют контейнеры благодаря реактивным крючкам, но несколько использовать несколько битов состояния, обработчиков событий и т. д .; в этих случаях я чувствую, что чище разбивать их на контейнеры.

Есть ли лучший способ исправить это, кроме того, чтобы сделать шутку обычной зависимостью? Мне нужна следующая настройка:

  1. Пользователь вызывает запрос на извлечение и строит ветку Трэвис (только пропускает PR для объединения).
  2. Как только пиар попадет в мастер, Трэвис работает над сценариями и развертывается на страницах Github.

Любая помощь будет высоко ценится:)

1 Ответ

1 голос
/ 18 марта 2020

Сопровождающий Docusaurus здесь!

Странно, что веб-пакет собирает тестовые файлы. Вы поместили компоненты в каталог страниц? Если это так, это может заставить Docusaurus думать, что тесты - это сами страницы.

Является ли ваш репозиторий опубликованным c? Обмен это определенно поможет. Все JS файлы в src/pages станут маршрутами, поэтому убедитесь, что все JS файлы в src/pages можно превратить в страницы, и экспортируйте компонент React. Ваш каталог components не находится в пределах src/pages. Это должно быть в src/components.

...