Skip to content

Cypress runner crashes after a cy.request() command times out #16476

@gabi-dobritescu

Description

@gabi-dobritescu

Current behaviour

The Cypress test runner crashes with a "RangeError: Maximum call stack size exceeded" error a few seconds after a cy.request() command times out.

This happens with both cypress open and cypress run.

Desired behavior

cy.request() commands that time out should not crash the test runner.

Test code to reproduce

Demo repo and instructions here: demo repo

Here's a copy of the relevant files from the project:

package.json

{
  "name": "stack-size-exceeded",
  "version": "1.0.0",
  "description": "A demo project to show the stack size exceeded error with Cypress",
  "main": "index.js",
  "author": "Gabi Dobritescu",
  "license": "MIT",
  "private": true,
  "scripts": {
    "start": "node app.js",
    "cypress:open": "node_modules\\.bin\\cypress open"
  },
  "devDependencies": {
    "cypress": "^7.3.0",
    "express": "^4.17.1"
  }
}

cypress.json

{
  "responseTimeout": 2000
}

app.js

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  setTimeout(() => {
    res.send('Hello World!')
  }, 5000)

})

app.listen(port, () => {
  console.log("Example app listening at http://localhost:${port}")
})

quick-test.spec.js

describe("Demo test for the exceed stack size error", () => {
  it("should gracefully fail the test when api request times out", () => {
    cy.request("http://localhost:3000/").then(response => {
      expect(response.body).to.equal("Hello World!");
    })
  })
})

To reproduce the issue:

yarn install

yarn start

yarn cypress:open

Run the quick-test.spec test. After the test completes (failing as expected because the request timed out before the server responded) wait for a few seconds (anywhere between 2 to 5 second usually).
The runner crashes with the following error and stacktrace:

RangeError: Maximum call stack size exceeded
    at isBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:23:18)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:46:9)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:40:17)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:40:17)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:40:17)
    ...
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:40:17)
    at Object.hasBinary (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\is-binary.js:55:63)
    at Encoder.encode (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\index.js:38:29)
    at Client._packet (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\client.js:169:44)
    at Socket.packet (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\socket.js:160:21)
    at C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\socket.js:274:18
    at C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\lib\socket-base.js:325:28
    at tryCatcher (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:547:31)
    at Promise._settlePromise (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:604:18)
    at Promise._settlePromise0 (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:649:10)
    at Promise._settlePromises (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:725:18)
    at _drainQueueStep (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:93:12)
    at _drainQueue (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:86:9)
    at Async._drainQueues (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:102:5)
    at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\dobrites\AppData\Local\Cypress\Cache\7.3.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:15:14)
    at processImmediate (internal/timers.js:461:21)

Versions

7.3.0

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions