Local test run fails with `UnhandledPromiseRejectionWarning` error message
Couldn't run tests locally on a Linux virtual machine.
❯ npm run test-pages
> [email protected] test-pages /home/d2s/[... directory path ...]/speedlify
> node run-tests
There are no known last run timestamps
First tests for netlify.
Testing 9 sites:
(node:12367) UnhandledPromiseRejectionWarning: Error: connect ECONNREFUSED 127.0.0.1:40217
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
(node:12367) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:12367) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Dependencies installed properly with npm install but for some reason Chromium doesn't seem to work properly.
❯ node --version
v12.18.0
This bug report is related to the latest Git commit cd322fe5f111ca59894b0c9f9497c57725fee087 of the speedlify repository.
I was getting this error on MacOS. I think the culprit is puppeteer, as here: https://github.com/zachleat/speedlify/issues/17#issuecomment-653579379
Removing puppeteer and re-installing node modules seems to have fixed it for me.
In macOS, I am getting the same error after cloning the most recent speedlify repo (renaming the local folder speedlify-hosts-test) although a clone from two days ago worked fine. Maybe something broke in the interim? As the README suggests, I had replaced the /_data/_sites/*.js files with a /_data/sites.js of my own but had observed similar problems even when I left @zachleat's originals in place, too. This is what I get when I try npm run test-pages (and, yes, I did do npm install):
There are no known last run timestamps
(node:37780) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'length' of undefined
at [... directory path ...]/speedlify-hosts-test/run-tests.js:70:73
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:37780) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:37780) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
I should also note that I've been unable to get the latest speedlify to work on an install on either Netlify or render.com, running into roughly this same problem in each case.
@brycewray can you file a separate issue? What’s your vertical config file look like? Sounds like you’re missing a urls array in the file.
@brycewray can you file a separate issue? What’s your vertical config file look like? Sounds like you’re missing a
urlsarray in the file.
Will file separate issue. Thanks.
Update: @zachleat, went back to your original config and saw the problem. PEBKAC on my part. 🤷 🤦 Thank you as always, sir.
I have the same problem as @d2s. On a new Ubuntu 18.04 server, I run the following and get:
$ node -v
v14.8.0
$ git reflog HEAD
e9e4e58 (HEAD -> live, origin/live, origin/HEAD) HEAD@{0}: clone: from https://github.com/zachleat/speedlify.git
$ npm install
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: this library is no longer supported
npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
> [email protected] install /home/speedlify/speedlify/node_modules/puppeteer
> node install.js
Downloading Chromium r782078 - 126.4 Mb [====================] 100% 0.0s
Chromium (782078) downloaded to /home/speedlify/speedlify/node_modules/puppeteer/.local-chromium/linux-782078
> [email protected] postinstall /home/speedlify/speedlify/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
> [email protected] postinstall /home/speedlify/speedlify/node_modules/ejs
> node ./postinstall.js
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN [email protected] requires a peer of puppeteer@^1.10.0 || ^2.0.0 but none is installed. You must install peer dependencies yourself.
added 676 packages from 581 contributors and audited 682 packages in 29.101s
23 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
$ npm run test-pages
> [email protected] test-pages /home/speedlify/speedlify
> node run-tests
There are no known last run timestamps
First tests for clients.
Testing 1 site:
(node:1061) UnhandledPromiseRejectionWarning: Error: connect ECONNREFUSED 127.0.0.1:38417
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:1061) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:1061) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
I've tried it with different URLs to check if that's the problem. The sole file in _data/sites is data/sites/clients.js:
module.exports = {
name: "clients", // optional, falls back to object key
description: "Client sites",
options: {
frequency: 60 * 23, // 24 hours
// Use "run" if the sites don’t share assets on the same origin
// and we can reset chrome with each run instead of
// each site in every run (it’s faster)
// Use "site" if sites are all on the same origin and share assets.
freshChrome: "run"
},
urls: [
"https://www.google.com/",
]
};
wget works to fetch the URLs, so there isn't a firewall issue.
I don't know how to debug this. I added --verbose to npm run test-pages but that didn't help
Solved for Ubuntu 18.04 by installing the following:
apt-get install -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb libgbm-dev
How I got to this
https://github.com/joelgriffith/navalia/issues/20#issuecomment-315187887 taught me about DEBUG=* which sadly didn't have much effect when running npm run test-pages.
After thinking about what software was used, I tried running lighthouse directly using
CHROME_PATH=/home/speedlify/speedlify/node_modules/puppeteer/.local-chromium/linux-782078/chrome-linux/chrome node ./node_modules/lighthouse/lighthouse-cli https://google.com --chrome-flags="--no-sandbox --headless --disable-gpu"
This output an error that a .so was missing. I installed that, re-ran and another .so was listed.
Rather than installing them one-by-one I went looking for a list of extra packages. After a bit of trial and error (there's lots of "You need this to get Puppeteer to run" posts, many outdated - one of which I'd tried installing straight after my first comment, and it didn't work) I found the list above at https://github.com/puppeteer/puppeteer/issues/3443#issuecomment-629662626.