捕获 Jasmine Protractor 规范测试中的所有失败

Catching all failures in Jasmine Protractor spec tests

我希望能够捕获我的规范中的所有故障并将其记录到我的 Test Rail 集成中。我目前有这种模式,我将所有测试包装在 try/catch 中,在 CATCH 上,我将测试标记为 FAILURE 并将其添加到结果数组中。在 afterAll 内部,它将所有这些结果发送到 Test Rail 的 API.

这一切基本上都是正确的。但是,偶尔我的一个测试会失败,但不会触发代码的 catch 部分。我的规范文件将一直进行到 done() 并完成完整测试,然后一旦代码到达 AfterAll 部分就会显示我的失败。

我认为这是因为 expect(lookForSomeObject) 仍在后台 processing/looking,并且直到规范文件到达 AfterAll 部分才最终完成它的工作。

我怎样才能更新这个模式更好。

afterAll(async () => {
    var r = await tr.addResultsForCases(testCases);
});

it('Verifies Search', async (done) => {
        var testCaseInfo: AddResultForCase = {
            case_id: 75
        }

        try {
            const locatorSearchBarInput = await loc.locatorSearchBarInput();
            await waitToBeDisplayed(locatorSearchBarInput);
            await locatorSearchBarInput.sendKeys('35011');
            const locatorSearchButton = await loc.locatorSearchButton();
            await waitToBeDisplayed(locatorSearchButton);
            await click(locatorSearchButton);

            await expect(await loc.locatorSearchBarText()).toBeDisplayed();

            testCaseInfo.status_id = TestRailStatus.Passed;
            testCases.results.push(testCaseInfo);
            done();
        } catch (e) {
            testCaseInfo.status_id = TestRailStatus.Failed;
            testCases.results.push(testCaseInfo);
            done.fail(e);
        }
    });
  1. 我会摆脱 try/catch
  2. 在环境中将 case_id 添加到您的 it 描述中 Verifies Search @75
  3. 按照此处所述创建您自己的自定义茉莉花记者 https://jasmine.github.io/tutorials/custom_reporter
  4. 在你的 onPrepare() 中注册它
  5. specDone 函数将采用 spec 参数(或 result,无论您如何称呼它)。然后添加这个片段
specDone: function(spec) {
  if (spec.status === 'passed') {
    // do anything on success
  } else if (spec.status === 'failed') {
    let case_id = spec.description.match(/@([^@]*$)/)[1];
    // report your case_id as failed
  } else {
    // block for skipped test cases (marked by `xit` or `xdescribe`)
  }
}

就是这样。无需再将您的处理添加到每个测试用例。