Как поставить что-то в очередь на Cypress тест - PullRequest
1 голос
/ 31 января 2020

У меня есть следующий тест для моей собственной команды Cypress :

it('can navigate to a url', () => {
  const history = createHistory();
  cy.window().then(win => ((win as any).__chh__history__ = history));

  cy.spy(history, 'push');
  history.listen((location, action) => {
    expect(action).to.equal('PUSH');
    expect(location.pathname).to.equal(PATH);
    expect(location.state).to.equal('foobar');
  });

  cy.navigate(PATH, 'foobar');

  cy.wait(0).then(() => {
    expect(history.push).to.have.been.called;
  });
});

Команда работает нормально, но если я удаляю cy.wait(0), выполняю только expect, тогда тест не пройден.

Я предполагаю, что это потому, что команда cy.navigate (добавленная через Cypress.Commands.add) ставится в очередь, как и другие команды Cypress, то есть expect фактически выполняется перед любой из команд Cypress даже начали?

Если это так, это нормально и, как и ожидалось, конечно, но есть ли способ в Cypress-тестах ставить вещи в очередь, не используя cy.wait(0)?

Например, когда я ' м проверяя элементы, я могу использовать cy.get(something).should($el => expect(...)), но в этом случае нечего "должен включать" ... Я мог бы, конечно, cy.get('body') или что-то еще, но я действительно не хочу получать что-либо в этом случае. ?

1 Ответ

0 голосов
/ 31 января 2020

документы показывают использование обнаженного expect() после того, как шпион был установлен,

cy.spy(util, 'addListeners')  
App.start()  
expect(util.addListeners).to.be.called

, но я думаю, что это вводит в заблуждение, поскольку expect() запускается немедленно, но с вмешательством Команды Cypress могут иметь собственные задержки или задержки и не могут быть гарантированно завершены до выполнения ожидаемого значения.

Два других способа проверить это:

Убедитесь, что ожидаемое значение равно запускать только после вашей пользовательской команды

cy.navigate(PATH, 'foobar').then(() => {
  expect(history.push).to.have.been.called;
})

Поместить ожидание в очередь команд Cypress

cy.navigate(PATH, 'foobar');
cy.wrap(history).its('push').should('have.been.called')
...