тестирование функции firebase с помощью jest - PullRequest
0 голосов
/ 24 марта 2020

Уже два дня я пытаюсь понять и написать тест для моей функции firebase. Для этого теста я просто хочу использовать фреймворк Jest. https://jestjs.io/

export const updateTipsPerFixture = functions.firestore.document('users/{userId}').onUpdate((change) => {
    const beforeTips: Tip[] = change.before.data() !== undefined ? change.before.data().tips : [];
    const afterTips: Tip[] = change.after.data() !== undefined ? change.after.data().tips : [];

    if (JSON.stringify(beforeTips) === JSON.stringify(afterTips)) {
        return new Promise(resolve => resolve('equal'));
    }

    if (afterTips.length === beforeTips.length) {
        return new Promise(resolve => resolve('same length'));
    }

    if (beforeTips.length < afterTips.length) {
        return new Promise(resolve => resolve('afterTips.length is longer'));
    }

    return false;
});

Даже после того, как я прочитал документацию Jest и не могу понять, как смоделировать / заглушить функциональный модуль firebase для моего варианта использования.

Это насколько я пришел. Да, не очень далеко.

describe('updateTipsPerFixture', () => {
    test('it should return true when tips are equal', () => {
        expect(updateTipsPerFixture).toEqual(new Promise(resolve => 'equal'));
    });
});

Как мне написать тест и смоделировать модуль firebase?

1 Ответ

0 голосов
/ 25 марта 2020

Решение, которое я нашел, довольно легко и приятно. Функцию можно проверить, вызвав функцию run () и передав некоторые данные. Смотрите пример:

describe('updateTipsPerFixture', () => {
    test('it should return true when tips are equal', () => {
        const mockedData = {
            before: {
                data(): FirebaseFirestore.DocumentData | undefined {
                    return {tips: [{fixtureId: 123, teamId: 123} as Tip]}
                }
            },
            after: {
                data(): FirebaseFirestore.DocumentData | undefined {
                    return {tips: [{fixtureId: 123, teamId: 123} as Tip]}
                }
            }
        } as Change<DocumentSnapshot>;

        const actual = updateTipsPerFixture.run(mockedData, null);

        return expect(actual).resolves.toEqual('equal');
    });
});
...