From 95feb15e30aaadb991e236946160275f8b30b0dc Mon Sep 17 00:00:00 2001 From: Michael Short Date: Fri, 8 Apr 2022 12:32:34 -0500 Subject: [PATCH] fix: empty state urls in navigation (#20948) --- .../cypress/integration/cy/navigation_spec.js | 22 +++++++++++++++++++ packages/driver/src/cy/navigation.ts | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/packages/driver/cypress/integration/cy/navigation_spec.js b/packages/driver/cypress/integration/cy/navigation_spec.js index 3fc1a66fe3bf..b090c40fd750 100644 --- a/packages/driver/cypress/integration/cy/navigation_spec.js +++ b/packages/driver/cypress/integration/cy/navigation_spec.js @@ -146,6 +146,28 @@ describe('cy/navigation', () => { expect(triggeredHashChange).to.be.false }) + it('when no urls or urlPosition in state', () => { + const state = $SetterGetter.create({ + navHistoryDelta: 1, + }) + + const triggeredHashChange = historyNavigationTriggeredHashChange(state) + + expect(triggeredHashChange).to.be.false + }) + + it('when no urlPosition in state', () => { + const state = $SetterGetter.create({ + navHistoryDelta: 1, + url: 'https://my_url.com/', + urls: ['https://my_url.com/', 'https://my_url.com/home'], + }) + + const triggeredHashChange = historyNavigationTriggeredHashChange(state) + + expect(triggeredHashChange).to.be.false + }) + it('when neither url has a hash', () => { const state = $SetterGetter.create({ navHistoryDelta: 1, diff --git a/packages/driver/src/cy/navigation.ts b/packages/driver/src/cy/navigation.ts index 66c5e5e7eb62..6b6c4bc4dc1e 100644 --- a/packages/driver/src/cy/navigation.ts +++ b/packages/driver/src/cy/navigation.ts @@ -1,3 +1,4 @@ +import _ from 'lodash' import { $Location } from '../cypress/location' export const bothUrlsMatchAndOneHasHash = (current, remote, eitherShouldHaveHash: boolean = false): boolean => { @@ -26,6 +27,11 @@ export const historyNavigationTriggeredHashChange = (state): boolean => { const urls = state('urls') const urlPosition = state('urlPosition') + + if (_.isEmpty(urls) || urlPosition === undefined) { + return false + } + const currentUrl = $Location.create(urls[urlPosition]) const nextPosition = urlPosition + delta