Обработка ошибок — Как мне остановить скрипт, если перед каждым перехватом в a ошибка?

#node.js #typescript #testing #automated-tests #testcafe

#node.js #typescript #тестирование #автоматизированные тесты #testcafe

Вопрос:

Я использую Testcafe для автоматизации E2E и хочу добавить несколько более красивых ошибок (вместо элемента x, не найденного в DOM). Перед каждым тестированием я выполняю чистый вход в приложение, но это может привести к сбою (поскольку я запускаю тесты в среде разработки после успешного развертывания основной сборки), например, разработчики прервали сборку, служба, необходимая для входа в систему, отключена, сам логин сломался и так далее.

Я хочу, чтобы мой скрипт сразу же завершался неудачей, вместо того, чтобы пытаться запустить все тесты и завершиться неудачей по той же причине. Я прочитал в stack overflow, что я должен использовать возврат и что мой скрипт должен остановиться с возвратом, поэтому я добавил его во второй блок catch (повторите попытку входа, затем сбой), но, похоже, он этого не делает. Что я делаю не так?

Должен ли я использовать try / catch с возвратом в loginpage.login или я могу достичь того, чего я хочу достичь перед каждым перехватом?

Прямо сейчас, если по какой-либо причине не удается войти в систему, скрипт по-прежнему пытается выполнить все тесты. Я хочу, чтобы тесты были пропущены, если перед каждым перехватом произошел сбой. Как я могу этого добиться?

 fixture `Activity History Tests`
.page `https://mypage.com`
.beforeEach(async (t) => {
    try {
        await loginPage.login(username, password) 
    }
    catch(e) { 
        try {
            console.log('Login Failed, retrying. Failure reason: ')
            await loginPage.login(username, password)
        }
        catch(e) {
            throw new Error('Couldn't login')
            return

        }
    }}
)


test('Test #1: do something, async (t) => {
    await t.setTestSpeed(0.8)
    try { //the test goes here }
  

Содержимое LoginPage.login():

   async login(username: string, password: string) {

await t
  .setTestSpeed(0.5)
  .maximizeWindow()
  .click(this.loginButton)
  await t
  .typeText(this.emailField, username, {paste:true})
  .click(this.submit)
  await this.passwordField.visible
  await t
  .typeText(this.passwordField, password)
  .click(this.signInButton)
 // await t
  //.click(this.staySignedIn)
  const breakPanelText = await this.breakPanel
  await t
  .expect(breakPanelText.innerText).notContains("Hello Agent", {timeout: 10000})
};
  

Ответ №1:

В настоящее время не существует общедоступного API для прерывания выполнения теста с помощью Test API. Я создал предложение в репозитории TestCafe GitHub для вашего варианта использования.