Don't tell anyone, but our app is not yet single-page. I can wait on a given XHR request by giving the route an alias, but how do I wait until some navigation completes and the browser is safely on a new page?
You can add some assert inside:
cy.click('#someButtonToNavigateOnNewPage');
cy.location('pathname', {timeout: 60000})
.should('include', '/newPage');
cy.click('#YouAreOnNewPage');
You can change default timeout - by default it's 4000 ms (4 secs) - to ensure that user navigated the page. I've put a big number here - 60,000 ms - because I'm sure that 99% of users will leave if they do not have page loaded after 1 min.