Estoy probando una interfaz de usuario que al hacer clic actualiza window.location.href . Tengo dos pruebas, la primera funciona, pero la segunda comienza en la ubicación establecida por la interfaz de usuario en la prueba anterior. Esto es incorrecto y evita que la prueba dos comience en la página correcta.
¿Cómo puedo restablecer window.location.href o simplemente la ubicación del navegador Cypress en general a donde estaba al comienzo de la primera prueba?
Revisé window.location.href al comienzo de la segunda prueba y parece autogenerado, por lo que no creo que sea prudente intentar codificar ese valor en window.location.href al comienzo de la segunda prueba.
Buscando algo que pueda ejecutar en afterEach .
Prueba
it.only('should send asynchronous analytics event after provider selection click', () => { rewire$useFlag(() => true); cy.location().then((location) => console.log('window !!')); const analyticsAsyncStub = cy.stub().as('sendAnalyticsAsyncStub'); rewire$sendAnalyticsAsync(analyticsAsyncStub); // @NOTE hacking browser detection so required provider options are availiable cy.window().then(($window) => { console.log('window !!', $window.location.href); ($window as any).chrome = {}; ($window as any).chrome.runtime = { sendMessage() { 'mock function'; }, }; }); mountFixtureWithProviders({ children: <ProviderSelection flagsConfig={defaultFlags} /> }); cyGetByTestId('provider--metaMask').click(); cy.get('@sendAnalyticsAsyncStub').should( 'have.been.calledWithMatch', analyticsUtilsModule.createButtonEvent(ButtonEventName.providerSelectionPressed), ); });función mountFixtureWithProviders
export const mountFixtureWithProviders = ({ children, mountInsideVisualMock = true, setErrorLog = () => ({}), renderErrorScreens, }: { children: ReactNode; mountInsideVisualMock?: boolean; setErrorLog?: SetErrorLog; renderErrorScreens?: boolean; }) => { const RouterMockedChildren = () => <MemoryRouter>{children}. </MemoryRouter>; const ProvidedChildren = () => renderErrorScreens ? ( <DemoAppToRenderErrorMessages> <RouterMockedChildren /> </DemoAppToRenderErrorMessages> ) : ( <LinkUiCoreContext.Provider value={{ setErrorLog, imageResizerServiceUrl: DEV_IMAGE_RESIZER_SERVICE_URL }}> <RouterMockedChildren /> </LinkUiCoreContext.Provider> ); return mount(mountInsideVisualMock ? linkPageVisualMock({ children: <ProvidedChildren /> }) : <ProvidedChildren />); };Gracias.
Por lo general, solo puede hacer una visita antes de beforeEach() para obtener un comienzo limpio para cada prueba
beforeEach(() => { cy.visit('/') }) También hay cy.go('back') que puede ejecutar al final de la primera prueba.
Pero tenga en cuenta que una falla en la prueba 1 fallará en la prueba 2 porque la navegación no sucederá; lo mismo se aplica a la adición en afterEach() .
En la window del corredor de prueba, pero puede acceder a la ventana de la aplicación con
cy.window().then(win => console.log(win.location.href))o la ubicación directamente con
cy.location().then(loc => console.log(loc.href)) No use cy.log() para la depuración, use console.log() ya que cy.log() efectos secundarios que pueden proporcionarle información de depuración incorrecta.
(mountFixtureWithProviders({ children: <ProviderSelection flagsConfig={{}} /> }) parece una prueba de componente, así que sí, estoy de acuerdo en que debería darle un nuevo comienzo para cada prueba.
¿Puede agregar las dos pruebas y también mountFixtureWithProviders en la pregunta para dar una imagen completa, por favor?