cypress-io / cypress

Fast, easy and reliable testing for anything that runs in a browser.
https://cypress.io
MIT License
47.09k stars 3.19k forks source link

`cy.window().its( 'mw' )` is executing the `inspect` method on the subject #30662

Open micgro42 opened 19 hours ago

micgro42 commented 19 hours ago

Current behavior

The instruction

cy.window().its( 'mw' ).should( 'have.property', 'propertyToCheckFor' );

is executing the mw.inspect method if it exists.

That is fully unexpected and might lead to undefined behavior, including throwing an Exception and thus failing the test.

Desired behavior

The instruction

cy.window().its( 'mw' ).should( 'have.property', 'propertyToCheckFor' );

is not executing any methods of the window.mw object at all.

Test code to reproduce

https://github.com/micgro42/cypress-MFE-inspect

Cypress Version

13.16.0

Node version

v20.15.0

Operating System

Ubuntu 24.04.1

Debug Logs

GitHub complained that the comment is too long when I tried to add the entire debug output here. Please be more specific with what you need here. Alternatively, the debug output should be trivial to reproduce with the test code provided above.

Other

No response

ryanthemanuel commented 13 hours ago

Hi @micgro42. This is actually a function of how chai works in terms of its matchers (in this case the have.property matcher). This can be seen by changing the test code to:

    cy.window().then((win) => {
      expect(win.mw).to.have.property('propertyToCheckFor');
    })

or even:

    cy.window().then((win) => {
      expect(win.mw).to.exist;
    })

If calling inspect is causing a problem, I would recommend switching up how you're asserting. Something like this could work:

    cy.window().then((win) => {
      expect(win.mw.propertyToCheckFor).to.exist;
    })