Глубоко протестировать вложенное возвращаемое значение анонимной функции из объекта свойств с помощью Jest - PullRequest
0 голосов
/ 08 февраля 2019

Проблема

Я кодирую модульные тесты с Jest в приложении реагирования и хочу проверить, правильно ли функция выполняет свою (вложенную) работу.
Функция возвращает объект с тремя свойствами.Каждое свойство равно анонимной функции, которая возвращает определенную функцию.Я не могу найти, как проверить конкретную функцию и переданные ей параметры.

Так выглядит вся функция

const myFunction = (param) => {
    return {
        prop1: (value) => {
            return specificFunction(param.someProp1, value);
        },
        prop2: (value) => {
            return specificFunction(param.someProp2, value);
        },
        prop3: (value) => {
            return specificFunction(param.someProp3, value, true);
        },
    };
};

Я хочу проверить return specificFunction… строки

Фактическое состояние

После прочтения документов JestJS я попробовал решение, которое работает, но без контроля переданных параметров конкретной функции.

describe('myFunction', () => {
    it('should returns object with 3 properties that have an anonymous'
     + 'function that returns a specificFunction with specific parameters'
     + 'passed in', () => {
        expect(
            myFunction({
                someProp1: 'a',
                someProp2: 'b',
                someProp3: 'c',
            }),
        ).toEqual({
            prop1: expect.any(Function),
            prop2: expect.any(Function),
            prop3: expect.any(Function),
        });
    });
});

Тест проходит, но без контроля

Ожидаемый результат

Я хочу, чтобы мой тест проверял, вызывает ли myFunction сначала определенную вложенную функцию, а также вызывает ее с конкретными параметрамикак

describe('myFunction', () => {
    it("should do the job (I don't want to write the whole (long) description)", () => {
        expect(
            myFunction({
                someProp1: 'a',
                someProp2: 'b',
                someProp3: 'c',
            }),
        ).toEqual({
            prop1: // Check if specificFunction is returned from the anonymous function
                   //and that the first parameter is 'a' and the second is the parameter from anonymous function

            prop2: // Check if specificFunction is returned from the anonymous function
                   // and that the first parameter is 'b' and the second is the parameter from anonymous function

            prop3: // Check if specificFunction is returned from the anonymous function
                   // and that the first parameter is 'a', the second is the parameter from anonymous function
                   // and the third parameter is a boolean set to true
        });
    });
});

Я не знаю, пытаюсь ли я решить проблему правильным способом.Я открыт для любых предложений, но не могу изменить логику с начальной функции myFunction

1 Ответ

0 голосов
/ 08 февраля 2019

Вы, вероятно, хотите что-то вроде:

const {prop1, prop2, prop3} = myFunction({
    someProp1: 'a',
    someProp2: 'b',
    someProp3: 'c',
})
expect(prop1(value)).toEqual(
// something here
)
expect(prop2(value)).toEqual(
// something here
)
expect(prop3(value)).toEqual(
// something here
)

...