cypress: RangeError: Maximum call stack size exceeded when making cy.request which times out
Current behavior
When making cy.request(url) to the endpoint which does not respond in 30 seconds (default response timeout), cypress crashes with RangeError: Maximum call stack size exceeded
error in socket.io-parser, used by bluebird library.
Desired behavior
cy.request(url) should fail the test instead of crashing the cypress.
Test code to reproduce
spec.js:
/// <reference types="cypress" />
context('Network Requests', () => {
it('cy.request() - make an XHR request', () => {
// https://on.cypress.io/request
cy.request('http://localhost:8080').then(r => {
cy.wrap(r.body).should('contain', 'Hello');
})
})
})
server.js:
const express = require('express');
const app = express();
app.get('/', async (req, res) => {
await sleep(50000);
res.send('Hello from App Engine!');
});
// Listen to the App Engine-specified port, or 8080 otherwise
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}...`);
});
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
Versions
Definitely 6.6.0 and 6.8.0, possibly earlier.
Callstack
RangeError: Maximum call stack size exceeded
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:21:28)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
... 15k lines omitted ...
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:40:32)
at _deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:32:26)
at Object.deconstructPacket (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\binary.js:16:17)
at Encoder.encodeAsBinary (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\index.js:81:41)
at Encoder.encode (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io-parser\dist\index.js:43:29)
at Client._packet (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\client.js:167:44)
at Socket.packet (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\socket.js:161:21)
at C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\socket\node_modules\socket.io\dist\socket.js:270:18
at C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\lib\socket-base.js:304:28
at tryCatcher (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\promise.js:725:18)
at _drainQueueStep (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\Tests\AppData\Local\Cypress\Cache\6.6.0\Cypress\resources\app\packages\server\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:456:21)
Edit: Changed r.body.should('contain', 'Hello');
to cy.wrap(r.body).should('contain', 'Hello');
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 2
- Comments: 29 (6 by maintainers)
Duplicate of https://github.com/cypress-io/cypress/issues/15101 which we have a reproducible example for now.
@t00 I could also get yours to reproduce after a few tries of stop/starting.
Closing as Duplicate to track in one issue.
@DVGY Looks like @bahmutov is from the cypress team and hopefully might be able to help 😄