【问题标题】:Async Await Typescript Cucumber assertion fails with UnhandledPromiseRejectionWarning: AssertionError: but the test itself still passesAsync Await Typescript Cucumber 断言失败并出现 UnhandledPromiseRejectionWarning: AssertionError: 但测试本身仍然通过
【发布时间】:2020-02-12 12:12:13
【问题描述】:

我一直在尝试捕捉并抛出这个错误,认为这可能是问题所在,但测试仍然通过。我不知道如何捕捉/抛出这个(如果这是问题的话),所以当断言失败时测试将失败。

错误消息 -

UnhandledPromiseRejectionWarning: AssertionError: expected '25' to equal '2500'
    at selectElement.getText.then
...
1 scenario (1 passed)
13 steps (13 passed)

这是我的代码 特征码

Then(/^I verify the below options are correct:$/, async (coverageTable: TableDefinition) => {
async function processArray2(array) {
  let ArrayList;
  let firstLetterlowerEl;
  let actualList;
  for (let i = 0; i < array.rows().length; i++) {
    ArrayList = Coverage_Defaults[array.rows()[i][0]][array.rows()[i][1]];
    firstLetterlowerEl = await array.rows()[i][0].charAt(0).toLowerCase() + array.rows()[i][0].slice(1);
    actualList = await coveragesAuto[firstLetterlowerEl].elementId;
    await assertions.assertDropDownSelectedValue(actualList,ArrayList);
  }
});

断言代码

    public assertDropDownSelectedValue = async (elementId: string, expectedText: string, override?: string) => {
        try {
            let selectElement = override === 'xpath' ? element(by.xpath(elementId)).$('option:checked') : element(by.id(elementId)).$('option:checked');
            await selectElement.getText()
                .then((text: any) => expect(text).to.equal(expectedText)).catch(Err => {throw Err.stack})

        } catch (Err) {
            if (Err instanceof error.NoSuchElementError) {
                log.error(`${elementId} Element not found error \n ${Err.stack}`);
                throw Err.stack;
            } else if (Err instanceof error.ElementNotSelectableError) {
                log.error(Err.stack);
                throw Err.stack;
            } else {
                log.error(`Dropdown selected option does NOT match with expected text - elementId passed : ${elementId}`);
                throw Err;
            }
        }
    }

【问题讨论】:

  • 我应该注意,如果我直接调用 await assertions.assertDropDownSelectedValue(actualList,ArrayList) 而不使用 for 循环,它可以正常工作(正确失败)。我需要 for 循环的原因是我希望能够遍历表中的每个值数组并将其与下拉列表的值进行比较。

标签: typescript async-await protractor cucumber try-catch


【解决方案1】:

我认为您需要为循环使用IIFE

另外,如果您正在等待,最好将该承诺的值保存在一个变量中,然后使用该变量而不是使用 .then。

我也有一种感觉,这个错误是因为你的代码在执行过程中缺少一个承诺。因此,for 循环在执行完整代码之前完成。因此测试通过但异常失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多