Cypress is a end-to-end testing framework which is fast, easy and reliable testing for anything that runs in a browser.
Cypress version: 8.3.0
 
When using Cypress with ReactJS, you may run into a scenario where the tests run the first time, but subsequent tests break out of the Cypress tests run frame; and just shows your app, or your apps loading indicator.  So your tests stop.  
 
While clearing the Cypress cache fixes the tests for the next run, there should be a better solution.
 
In the developers tools, if you enable preserve logs for the console and network, you may see a redirect to `__`
 
Some searching for `cypress redirects to __` will lead you to
 
'Cypress test runner redirects to __ suddenly'
 
which suggests adding 
`
Cypress.on('window:before:load', (win) => {
      Object.defineProperty(win, 'self', {
            get: () => {
                return window.top
            }
        })
});
`
 
To add to your Cypress config,
assuming in `cypress.json` you have your support dir set to 
"supportFile": "[app-product]/support",
 
add the suggestion to a file
support/callbacks/fix_iframe_redirects.js
 
and in the support/index.js,
reference the file
import './callbacks/fix_iframe_redirects';
 
You may have to force refresh the Cypress browser, or clear the Cypress cache once more.
 
Additional config to check for:
While this seems to be the default, if you happen to be using an ejected Webpack config, also check that `navigateFallbackWhitelist` is set to check for `__`.  
 
...
new SWPrecacheWebpackPlugin({
...
navigateFallback: publicUrl + "/index.html",
navigateFallbackWhitelist: [/^(?!\/__).*/]
});
 
 
You may also encounter the generic error:
TypeError: Cannot set property name of  which has only a getter
 
Unfortunately, it seems that you can either delete the Cypress cache each time, or disable Chrome web security
tests/cypress/cypress.json
    "chromeWebSecurity": false,
 
With these changes, your Cypress tests should stay framed and run as expected.
 
 
-End of Document-
Thanks for reading