Я использую плагин autoLogin в CodeceptJS с Puppeteer в качестве тестовой библиотеки.
Это мой первый проект с CodeceptJS, рабочий процесс autoLogin работает нормально, но я не использую страницы приложения (UI) для входа в систему или проверки текущего токена, я использую прямые вызовы REST API, чтобы немного облегчить весь процесс. Быстрее.
Моя конфигурация autoLogin выглядит примерно так:
autoLogin: {
enabled: true,
saveToFile: true,
inject: 'login',
users: {
admin: {
login: async (I) => {
I.amOnPage('/login');
await I.loginWithCredentials(adminUser.username, adminUser.password);
},
check: (I) => {
const token = codeceptjs.store['admin_session'];
I.validateToken(token);
},
fetch: async (I) => {
const cookie = await I.grabCookie('token');
return cookie.value;
},
restore: (I, sessionToken) => {
I.amOnPage('/login');
I.saveTokenData(sessionToken);
}
},
}
}
Шаги saveTokenData()
, validateToken()
и loginWithCredentials()
- это настраиваемые шаги, определенные с помощью actor()
, например:
module.exports = function() {
return actor({
async validateToken(token) {
let response = await this.sendGetRequest(`/api/session/validate?token=${token}`);
if (response.status === 200) {
if (response.data === true) {
return true;
}
}
throw new Error('Invalid token !!');
}
});
Строка throw new Error('Invalid token !!');
Она генерирует непредвиденную ошибку в рабочем процессе, показывая эту строку в журнале:
(node:5986) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
Я пробовал несколько подходов, таких как использование recorder.add()
(выдача ошибки внутри рекордера), я также пытался использовать цепочки обещаний (без ключевого слова async
) и assert
lib с assert.fail()
, но всегда та же проблема.
Как я могу пометить свой пользовательский шаг как сбой без странных сообщений журнала? Я просто хочу реализовать шаг check
в autoLogin без выходящего API для проверки пользовательского интерфейса (I.see()
, I.seeElement()
, _16 _...)
Я использую уродливый обходной путь, пока не получу лучшее решение, настраиваемый шаг возвращает логическое значение без каких-либо ошибок, а в коде check
у меня есть следующее:
check: async (I) => {
console.log('admin.check');
const token = codeceptjs.store['admin_session'];
const isValid = await I.validateToken(token);
if (!isValid) {
I.see("NOTHING TO SEE HERE, so It'll fail");
}
},
Я открыл проблему в проекте CodeceptJS GitHub # 2600