Я настраиваю сервер graphql с graphql-yoga и prisma, используя Typescript.Когда пользователь регистрируется, на указанный адрес электронной почты будет отправлено письмо со ссылкой для проверки.Все работает нормально, но я хочу написать тест на мутацию перед рефакторингом функциональности, который проверяет, была ли вызвана функция send в SendGrid.
Я пытался шпионить за функцией с помощью spyOn, но все, что я получаю, это ошибка, которая возникает из-за отсутствия ключа API для SendGrid в среде тестирования.
Я использовал spyOn ранее,и это сработало, хотя я впервые использую jest с Typescript.
SignUp Mutation
import * as sgMail from '@sendgrid/mail';
sgMail.setApiKey(process.env.MAIL_API_KEY);
export const Mutation = {
async signUpUser(parent, { data }, { prisma }, info) {
[...]
const emailData = {
from: 'test@test.de',
to: `${user.email}`,
subject: 'Account validation',
text: `validation Id: ${registration.id}`
};
await sgMail.send(emailData);
return user;
}
}
Попытка spyOn
import * as sgMail from '@sendgrid/mail';
const signUpUserMutation = gql`
mutation($data: ValidationInput) {
signUpUser (data: $data) {
id
email
}
}
`;
it('should send a registration email, with a link, containing the id of the registration', async () => {
spyOn(sgMail, "send").and.returnValue(Promise.resolve('Success'));
const variables = {
data: {
email: "test@test.de",
password: "anyPassword"
}
};
await client.mutate({ mutation: signUpUserMutation, variables});
expect(sgMail.send).toHaveBeenCalled();
});
Запуск теста дает мне:
Error: GraphQL error: Unauthorized
Комментирование вызова функции send в мутации и запуск теста дает мне:
Error: expect(spy).toHaveBeenCalled()
Expected spy to have been called, but it was not called.