Как передать объект res в функцию обратного вызова в jest-макете? - PullRequest
0 голосов
/ 24 апреля 2019

Я занимаюсь разработкой веб-сервера в nodejs и в настоящее время пытаюсь охватить все ветки шутовым тестированием.У меня есть одна функция, logout, которая принимает объекты req и res из express.Мне нужно пройти тест внутри оператора if.

// app.js
function logout(req, res) {

    // console.log(req.session.destroy.toString());
    req.session.destroy(function (err){

        if (err){

            console.error(err);
            res.sendStatus(500);

        }
        console.log('Logged out');
        res.redirect('/');

    });

}
// app.test.js
    let res = {sendStatus: jest.fn((inp) => inp)};
    let req = {
        session: { destroy: jest.fn((callback) => {

            callback('TEST_ERROR');

        })}
    };

    test('Test /logout error', async () => {

        await logout(req, null);
        expect(req.session.destroy.mock.calls.length).toEqual(1);

    });

Я уже искал похожие ответы, и единственная тема, которую я смог найти, была this , которая позволила мнечтобы попасть внутрь оператора if, но теперь он выдает ошибку: TypeError: Cannot read property 'sendStatus' of null.Могу ли я в любом случае разрешить функции обратного вызова доступ к res, который я определил в app.test.js?Мы очень ценим любую помощь или указатели в правильном направлении.

Решено

Как правильно указал plumthedev, в моем app.test.js, когда я вызываю loguout, я передаю null, который у меня былпропущенный.Как только я изменил его, я решил проблему.

// app.test.js
test('Test /logout error', async () => {

    await logout(req, res);
    expect(req.session.destroy.mock.calls.length).toEqual(1);

});

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

В вашем app.test.js в test () вы передаете параметр res как null .И вы получаете ошибку TypeError: Cannot read property 'sendStatus' of null, которая обычно происходит потому, что вы передаете null .Этот обратный вызов корректен, но вызван неправильно.Попробуйте передать res , как вы передаете req .

Обязательно прочитайте об этом: Функции обратного вызова MDN (теория): https://developer.mozilla.org/en-US/docs/Glossary/Callback_function

Функции обратного вызова (FelDev на Medium - практика и теория): https://medium.com/javascript-in-plain-english/callbacks-in-node-js-how-why-when-ac293f0403ca

Привет, слива!

0 голосов
/ 24 апреля 2019

Пример простейшего обратного вызова выглядит так: ссылка Юй может легко передать некоторые реквизиты:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...