В контексте Cypress: как дождаться запроса Graphql клиента Apollo

В своих тестах я выполняю запросы graphql через ApolloClient и мутации для настройки своих данных. Используя кипарис, как мне настроить это, чтобы я мог дождаться выполнения этих шагов, прежде чем продолжить:

щас я его так взламываю...

  cy.wrap(null)
    .then(() => register({ email, template: 'basic' }))
    .then(() => {
      login(email);
    })
    .then(resp => console.info('Logged IN: ', resp));

  console.info('Hello [This logs out BEFORE the logged in -- i want to wait]') 
  cy.wait(1000);
  cy.visit('/');

но я хотел бы дождаться всего блока cy.wrap.

У кого-нибудь есть хорошее рабочее решение.

Спасибо!


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

export function login(email: string) {
  const client = new TestClient();

  return client
    .mutate<LoginMutation, LoginMutationVariables>({
      mutation: loginMutation,
      variables: { email }
    })
    .then(resp => {
      cy.setCookie('token', resp!.data!.login!.token!);
      return resp;
    });
}

а также

export function register(input: IRegisterInput) {
  const { email } = input;
  const name = input.name || faker.name.findName();
  return createInvitation(email, name).then(invitaitonResponse => {
    const inviteCode = invitaitonResponse.data!.createInvitation!.invitation!.inviteCode!;

    let variables: RegisterMutationVariables = { email, inviteCode };

    if (input.template) {
      variables.template = input.template;
    }

    const client = new TestClient();
    return client.mutate<RegisterMutation, RegisterMutationVariables>({
      mutation: registerMutation,
      variables: { email, inviteCode }
    });
  });
}

Этой информации недостаточно, чтобы ответить на ваш вопрос. Что возвращают те функции, которые вы вызываете? зарегистрироваться и войти

bkucera 17.03.2019 16:52

@bkucera -- добавлено в тело запроса. Спасибо

Jonathan 17.03.2019 18:33

cypress будет ждать всех промисов, возвращаемых этими функциями, так что можете ли вы объяснить больше о «шагах», которые не ожидаются?

bkucera 17.03.2019 18:47

(Я добавил в код журнал консоли) -- console.info("Hello") срабатывает ДО того, как console.info("Вошел в систему") -- поэтому его не ждут

Jonathan 17.03.2019 19:36

Нет, команды Cypress ставятся в очередь синхронно, но Cypress ожидает их выполнения самостоятельно. Console.log не является командой Cypress

bkucera 17.03.2019 20:50

Попробуйте cy.visit(). Затем

bkucera 17.03.2019 20:51

@bkucera - я не уверен, где вы хотите, чтобы я использовал cy.visit вместо использования ApolloClient для выполнения запроса. Это меньше, чем идеал.

Jonathan 18.03.2019 15:01

извините, я имею в виду поместить console.info в .then после вашего визита, вот так cy.visit().then(()=>{console.info(...)}) и удалить wait()

bkucera 18.03.2019 15:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
3
8
594
0

Другие вопросы по теме