Я пробовал Testcafe для наших тестов E2E приложения Nuxt, так как я понял, что у него есть хорошие селекторы с VueJS и он отлично работает, за исключением тех частей, где выполняется вызов cognito через ampify для входа / регистрации пользователя. Это может быть проблема testcafe и усиления, а не проблема инфраструктуры внешнего интерфейса, поскольку вход в систему / регистрация работает абсолютно нормально. Также попытался заменить вызовы Cognito обычными вызовами API REST, и это тоже работает нормально. Также пробовал это с Cypress, и они отлично работают, но Testcafe имеет лучший охват с точки зрения кросс-браузерного тестирования, так что, возможно, лучший вариант. Знаете ли вы, как я могу исправить эту ошибку или лучше посмотреть в разные рамки? Постараюсь поделиться своим кодом наилучшим из возможных способов, так как я не могу поделиться своим репо как с моей компанией. И будет рад ответить с большим количеством кода или разъяснений, если требуется. Спасибо и найдите код ниже:
Моя функция отправки:
async submit() {
this.$v.$touch();
if (this.$v.$invalid) return;
this.disabled = true;
try {
await this.registerUser({
username: this.email,
password: this.newPassword,
attributes: {
given_name: this.firstname,
family_name: this.lastname,
email: this.email,
'custom:isPerson': 'true',
'custom:dataPrivacy': 'true'
}
});
this.$router.push(this.appendLocalization('/user/confirmuser'));
this.disabled = false;
} catch (error) {
this.$log.error('Could not register user', error);
this.disabled = false;
}
Функция усиления:
import Auth from '@aws-amplify/auth';
import Amplify from '@aws-amplify/core';
Amplify.configure({
Auth: {
userPoolId: process.env.userPoolId,
userPoolWebClientId: process.env.userPoolWebClientId,
region: process.env.region
}
});
export const state = () => {
return {
session: {},
user: {}
};
};
export const mutations = {
setUser: (state, user) => {
state.user = { ...user };
state.session = state.user.signInUserSession;
}
};
registerUser: ({ commit }, credentials) =>
new Promise((resolve, reject) => {
Auth.signUp({
username: credentials.username,
password: credentials.password,
attributes: credentials.attributes
})
.then((user) => {
commit('setUser', user);
resolve(user);
})
.catch(reject);
}),
Мой код Testcafe:
import { Selector, ClientFunction } from 'testcafe';
fixture`Signup Page`.page`http://localhost:3000/de/user/signup`;
const email = Selector('input').withAttribute('name', 'email');
const password = Selector('input').withAttribute('name', 'password');
const checkbox = Selector('input').withAttribute('type', 'checkbox');
const button = Selector('button').withAttribute('name', 'submit');
const getLocation = ClientFunction(() => document.location.href);
test('Test successful signup', async (t) => {
const validemail =
'WebFunctionalTest' + new Date().getTime() + '@something.com';
const validpassword = 'password';
await t
.typeText(email, validemail)
.typeText(password, validpassword)
await t.click(button).debug();
await t.expect(getLocation()).contains('userconfirm');
});
Ошибка регистрации:
RangeError: Maximum call stack size exceeded
at c (hammerhead.js:16)
at i (hammerhead.js:16)
at value (hammerhead.js:6)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
at _traverse (commons.app.js:12575)
PS: я вижу, что Testcafe выполняет вызов Cognito и получает правильный ответ на вкладке сети, но почему-то не обрабатывает его в коде. Я думал, что Testcafe должен вести себя как обычное пользовательское тестирование, такое как нажатие кнопки и ожидание завершения всей последовательности, то есть успешного перехода на страницу, но почему-то это не так.
Я потратил довольно много времени, пытаясь выяснить это, но не мог так детально опубликовать это здесь, любая помощь будет очень признательна. Заранее спасибо.