Cypress выполняет утверждение немедленно для функции, которая возвращает дескриптор - PullRequest
0 голосов
/ 21 февраля 2020

Кипарис немедленно выполняет ожидаемые утверждения. Даже не дожидаясь открытия представления вообще (которое занимает 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);
...