Я настраиваю сервер graphql с graphql-yoga
и `prisma, используя Typescript. Когда пользователь регистрируется, на указанный адрес электронной почты будет отправлено электронное письмо со ссылкой для проверки. Все работает нормально, но я хочу написать тест на мутацию перед рефакторингом функциональности, который проверяет, была ли вызвана функция отправки SendGrid.
Я пробовал шпионить за функцией с помощью jest.spyOn
, но все, что я получаю, - это ошибка, возникающая из-за того, что я не предоставил ключ API для SendGrid в среде тестирования.
Раньше я использовал spyOn, и он работал, хотя я впервые использую jest с Typescript.
Подписка на мутацию
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: '[email protected]',
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: "[email protected]",
password: "anyPassword"
}
};
await client.mutate({ mutation: signUpUserMutation, variables});
expect(sgMail.send).toHaveBeenCalled();
});
Выполнение теста дает мне:
Ошибка: ошибка GraphQL: неавторизованный
Комментируя вызов функции send в мутации и запуск теста, я получаю:
Ошибка: ожидать (шпион) .toHaveBeenCalled ()
Ожидаемый шпион должен был быть вызван, но он не был вызван.
spyOn
- это недокументированная устаревшая функция изJasmine
, которая все еще работает вJest
, но, вероятно, не должна (вы можете использовать--errorOnDeprecated
, чтобы выдать ошибку, если устаревшие API используются в ваши тесты) ... вместо этого используйтеjest.spyOn
- person Brian Adams   schedule 31.05.2019