Кипарис немедленно выполняет ожидаемые утверждения. Даже не дожидаясь открытия представления вообще (которое занимает 500 мс +) .. также cy.wait(1000)
или cy.get('.modalbutton').should('be.visible');
(что делает handle.exists()
правдивым) тоже полностью игнорируется, я ничего не могу сделать, чтобы предотвратить его от немедленного утверждения.
it('Open and close split view', () => {
cy.window().then(win => {
const handle = win.Luigi.navigation().openAsSplitView('/ext', {title: 'Preserved Split View' });
// using cy.wait(N) or cy.get('#opened-splitview').should('be.visible'); are being ignored
cy.wait(1000);
// expectations are not working since they are executed immediately
cy.expect(handle.exists()).to.be.true;
handle.close();
cy.expect(handle.exists()).to.be.false;
});
});
С другой стороны, это работает:
cy.window().then(win => {
const handle = win.Luigi.navigation().openAsSplitView('/ext', { title: 'Preserved Split View', collapsed: false});
handle.collapse();
cy.expect(handle.isCollapsed()).to.be.true;
});
Ранее он был зеленым, когда win .... openAsSplitView не был сохранен в константе дескриптора и закрылся и дополнительная команда в API Luigi.navigation (), которую я реорганизовал для согласования с нашим клиентским API.
Так что у меня есть ощущение, что это может быть ошибкой при перехвате Cypress win. Или я просто неправильно его использую.
Дескриптор не асинхронный c, поэтому его можно сразу использовать. Возможно, также поможет рефакторинг для возврата обещания, которое разрешается после того, как представление действительно открывается.
РЕДАКТИРОВАТЬ: Это своего рода условие гонки, которое не обрабатывается кипарисом. Я работал над этим с setTimeout
.
setTimeout(() => {
handle.close();
setTimeout(() => {
cy.expect(handle.exists()).to.be.false;
cy.get('#splitViewContainer').should('not.be.visible');
done();
}, 50);
}, 50);