将Docusaurus v2部署到GitHub页面时,Travis CI中未定义Jest

时间:2020-03-17 18:11:33

标签: reactjs jestjs travis-ci github-pages docusaurus

我目前正在努力在GitHub页面上设置Docusaurus v2网站。我已经为自己的组件编写了自己的Jest和酶测试。当前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笔录部分,以相对于node_modules的方式开玩笑:

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

这在travis中运行得非常好,我看到所有测试都通过了。我遇到的问题是,当它尝试将站点部署到GitHub页面时,如scripts.travis.yml的{​​{1}}部分的最后一行所示。随后,我收到以下错误:

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. ,因此在此阶段尚不存在。因此,在我的devDependency文件(即*.spec.js)中使用webpack时,找不到它。因此,我认为添加笑话作为正常依赖项可以解决此问题,尽管您可以理解,这既不理想也不正确。作为参考,我的测试文件不在jest.mock(...)或任何形式的测试目录中。当我遵循容器模式时,我所有的规范文件都与它们正在测试的文件相邻。其结构与此类似:

__TESTS__

快速旁注: 感谢react钩子,并不是我所有的组件都有容器,但是有一些确实利用了多个状态,事件处理程序等;在这种情况下,我觉得将它们分成一个容器更干净。

除了开个玩笑成为常规依赖之外,我还有更好的方法来解决此问题吗?我需要的设置是:

  1. 用户提出拉取请求,Travis建立分支(仅传递要合并的PR)。
  2. 公关登陆后,Travis将在脚本之上运行并部署到Github页面。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

Docusaurus维护者在这里!

webpack拾取测试文件很奇怪。您是否将组件放在页面目录中?如果是这样,可能会使Docusaurus认为测试本身就是页面。

您的回购公开吗?分享它肯定会有所帮助。 src/pages中的所有JS文件都将成为路由,因此请确保src/pages中的所有JS文件都可以转换为页面并导出React组件。您的components目录不在src/pages内。它应该在src/components中。