Файл чтения ошибок: тип операнда ‘await’ должен быть либо допустимым обещанием, либо не должен содержать вызываемый элемент ‘then

#javascript #async-await

#javascript #async-await

Вопрос:

У меня ошибка: ‘Тип операнда ‘await’ должен быть либо действительным обещанием, либо не должен содержать вызываемый элемент ‘then’.’ при изменении формата теста с использования синтаксиса на основе promise .then (), который работал для использования async / await. Что и было моей попыткой ниже.

  it('downloads successfully', async () => {
        cy.get(downloadButton).click();

        const csv = await cy.readFile(filename, { timeout: 15000 });
        csv.should('have.length.gt', 20);
        expect(csv, 'number of records').to.have.length(10);
})
 

перед

 cy.readFile(filename, { timeout: 15000 })
          .should('have.length.gt', 20)
          .then(validateCsv);

 

Комментарии:

1. Это Cypress? Методы ввода-вывода Cypress не возвращаются Promise<T> . Смотрите здесь: docs.cypress.io/guides/core-concepts /…

2. Спасибо, оказывается, это ответ. Я не понимал, что обещания cypress на самом деле не являются обещаниями. С радостью приму, если вы опубликуете его в качестве ответа.

Ответ №1:

readFile метод не возвращает promise и, следовательно, вы не можете использовать await для него, но should делает. Вы можете написать свою вышеуказанную реализацию следующим образом

  it('downloads successfully', async () => {
        cy.get(downloadButton).click();

        const csv = cy.readFile(filename, { timeout: 15000 });
        const res= await csv.should('have.length.gt', 20);
        expect(res, 'number of records').to.have.length(10);
})
 

Комментарии:

1. Спасибо за ваш ответ. Как ни странно, я все еще получаю ту же ошибку в const res = await csv.should(...) строке.