cypress
cypress copied to clipboard
Cypress hangs when wrapping an object containing circular references.
Current behavior
Cypress hangs when calling cy.wrap() with an object containing circular references.
Desired behavior
Do not hang.
Test code to reproduce
The code to reproduce this issue is as follows.
class Node {
parent;
children = [];
appendChild(child) {
child.parent = this;
this.children.push(child);
return child;
}
}
describe("Reproduce the Cypress's issue", () => {
it("Wrap an object containing circular references", () => {
const rootNode = new Node();
rootNode.appendChild(new Node()).appendChild(new Node());
cy.wrap(rootNode);
cy.visit("https://example.cypress.io/");
})
})
The actual code when I encountered the problem was more complex, and at first I did not know what the problem was. So I reduced my code while keeping the problem reproducible and finally arrived at the minimal code shown above.
When I comment out the code child.parent = this; inside appendChild() method, the problem no longer reproduces, so I think circular references might be the cause of the problem. However, this does not mean that circular references is a sufficient condition, as adding a new field to Node class would prevent the problem from being reproduced while circular references still remain.
The entire repro environment can be found in the repository below. https://github.com/higamaya/cypress-issue-20221117
Cypress Version
v11.1.0, v10.11.0
Node version
v18.12.1
Operating System
Microsoft Windows 10 Pro 10.0.19045
Debug Logs
No response
Other
No response