Testcafe не работает для вызовов Nuxt / Vue Amplify / Cognito. RangeError: превышен максимальный размер стека вызовов - PullRequest
0 голосов
/ 05 ноября 2019

Я пробовал 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 должен вести себя как обычное пользовательское тестирование, такое как нажатие кнопки и ожидание завершения всей последовательности, то есть успешного перехода на страницу, но почему-то это не так.

Я потратил довольно много времени, пытаясь выяснить это, но не мог так детально опубликовать это здесь, любая помощь будет очень признательна. Заранее спасибо.

...