Поскольку Cypress не может легко использовать async / await , чтобы использовать несколько связанных значений, сейчас я делаю это:
const getScrubPosition = () => cy.getState().its('meta').its('scrubPosition');
const getScrollBar = () => cy.getByTestId('SCROLL_BAR').then(([bar]) => bar);
const getGutter = () => cy.getByTestId('GUTTER').then(([bar]) => bar);
// my workaround
const getScrubScrollGutter = () => getScrubPosition().then(initialPos =>
getScrollBar().then(([bar]) =>
getGutter().then(([gutter]) =>
({ initialPos, bar, gutter }))));
it('is ridiculous', () => {
getScrubPosition().then(initialPos => {
getScrollBarWidth().then(initialWidth => {
getScrollContainerWidth().then(containerWidth => {
// do something with initialPos, initialWidth, and containerWidth
});
});
});
it('>90 frames, with current series', () => {
clickSeries(1, 3); // x2x4, 94 frames, including pending
getScrubScrollGutter().then(({ initialPos, bar, gutter }) => {
expectPendingShown(true);
expectScrollBar();
// the bar shouldn't be wider than the gutter
expect(bar.offsetWidth).to.be.lessThan(gutter.offsetWidth);
// the right of the bar should be aligned with the right of the gutter
expect(rightEdgeOf(bar)).to.equal(rightEdgeOf(gutter));
debugger
// the bar shouldn't be to the left of the gutter
expect(bar.offsetLeft).to.be.greaterThan(gutter.offsetLeft);
});
Должно быть лучше способ сделать это, верно? Упомянутая выше проблема с github говорит о вещах типа
cy.get('something')
.then(x => doSomethingTo(x))
.then(y => console.log('please help'))
et c. Но мне трудно это понять - или, если я это понимаю, на самом деле он не передает все значения в дальнейшие контексты (т. Е. Я не думаю, что вы можете использовать x
в третья строка из того, что я только что написал.)
А как насчет Promise.all
?
Да, я пробовал это. Пожалуйста, дайте Promise.all
связанный ответ, только если вы действительно смогли использовать его в Cypress.
Спасибо.