Почему функция spyOn в тесте не работает с sendGrid? - PullRequest
0 голосов
/ 30 мая 2019

Я настраиваю сервер 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.
...