В настоящее время я работаю над настройкой сайта 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: Не все мои компоненты имеют контейнеры благодаря реактивным крючкам, но несколько использовать несколько битов состояния, обработчиков событий и т. д .; в этих случаях я чувствую, что чище разбивать их на контейнеры.
Есть ли лучший способ исправить это, кроме того, чтобы сделать шутку обычной зависимостью? Мне нужна следующая настройка:
- Пользователь вызывает запрос на извлечение и строит ветку Трэвис (только пропускает PR для объединения).
- Как только пиар попадет в мастер, Трэвис работает над сценариями и развертывается на страницах Github.
Любая помощь будет высоко ценится:)