Как пройти аутентификацию для всех тестов с использованием TestCafe
Я знаю, что эта тема обсуждается довольно мало, но у меня уникальная ситуация.
Чтобы протестировать нашу среду принятия, нам нужно нажать https://authentication-example.com/, которая запускает сценарий для добавления файла cookie сеанса, таким образом, аутентифицируя нас. Затем мы переходим на https://acceptance-site.com/ для запуска тестов.
После попытки многих вариантов самое близкое к решению, которое я могу найти, - это использовать роль, такую как
const a3 = Role('https://acceptance-site.com', async testController => {
await testController.navigateTo('https://authentication-example.com');
await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });
fixture('Testing acceptance')
.beforeEach(async testController => {
await testController.useRole(authenticate);
});
test('example1', async testController => {
await testController.debug();
}).disablePageReloads;
test('example2', async testController => {
await testController.debug();
}).disablePageReloads;
test('example3', async testController => {
await testController.debug();
}).disablePageReloads;
Это решение не дает мне возможности загружать любые новые страницы, которые отличаются от того, чем заканчивается роль.
Если я удалю {preserveUrl: true} из роли, example2 и example3 загрузят пустые страницы. Если я удаляю.disablePageReloads из тестов, аутентификация завершается неудачно для второго и третьего тестов, и я получаю сообщение об ошибке "Не удалось найти DNS-запись для ресурса в...". Также если у меня есть роль как
const a3 = Role('https://authentication-example.com', async testController => {
await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });
проверка подлинности не пройдена для всех тестов.
Я заметил, что при успешной работе файл cookie, который я должен получить, на самом деле сохраняется в сеансе в приложении во время отладки, и он изменяется этой оболочкой-хранилищем молотка. Основной URL при тестировании - это ip и порт для сервера testCafe, перед которыми стоят случайные буквы, например 172.0.0.1:8080/hoi23hh/ https://acceptance-site.com/ результате чего мой cookie сохраняется в сеансе (не под cookie, как обычно происходит, когда не используется тестовое кафе) в качестве молотка |storage-wrapper|hoi23hh|accept-site.com
Когда я удаляю.disablePageReloads, но сохраняю для роли preserveUrl: true, "cookie" остается прежним, но базовый URL-адрес изменяется на 172.0.0.1:8080/ohgbo223/ https://acceptance-site.com/
таким образом, "hoi23hh" изменяется на "ohgbo223" в URL-адресе, а ключ cookie / сеанса больше не совпадает с URL-адресом, и аутентификация завершается неудачно.
Каковы ваши предложения для сохранения аутентификации, при этом все еще в состоянии менять страницы и тому подобное
1 ответ
Я не рекомендую использовать disablePageReloads
особенность с ролями, потому что она внутренняя и может быть нестабильной. preserveUrl
опция позволит каждому тесту начинаться с https://acceptance-site.com
стр. Итак, я думаю, что это наиболее предпочтительный способ в вашем случае:
const a3 = Role('https://acceptance-site.com', async testController => {
...
}, { preserveUrl: true });
fixture('Testing acceptance')
.beforeEach(async testController => {
await testController.useRole(authenticate);
});
test('example1', async testController => {
await testController.debug();
})
test('example2', async testController => {
await testController.debug();
})