#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 для вашего варианта использования.