В своих тестах я выполняю запросы 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 -- добавлено в тело запроса. Спасибо
cypress будет ждать всех промисов, возвращаемых этими функциями, так что можете ли вы объяснить больше о «шагах», которые не ожидаются?
(Я добавил в код журнал консоли) -- console.info("Hello") срабатывает ДО того, как console.info("Вошел в систему") -- поэтому его не ждут
Нет, команды Cypress ставятся в очередь синхронно, но Cypress ожидает их выполнения самостоятельно. Console.log не является командой Cypress
Попробуйте cy.visit(). Затем
@bkucera - я не уверен, где вы хотите, чтобы я использовал cy.visit вместо использования ApolloClient для выполнения запроса. Это меньше, чем идеал.
извините, я имею в виду поместить console.info в .then после вашего визита, вот так cy.visit().then(()=>{console.info(...)}) и удалить wait()


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