Почтальон - вызов функции с обратным вызовом, определенным в сценариях предварительного запроса Collection - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь определить функцию, которая отправляет запрос в коллекции сценариев предварительного запроса:

 const doRequest = (callback) => {
    const echoPostRequest = {
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: 'headername1:value1',
        body: {
            mode: 'raw',
            raw: JSON.stringify({ key: 'this is json' })
        }
    };
    console.log('ready to send request');
    pm.sendRequest(echoPostRequest, function (err, res) {
        console.log('request sent', err ? err : res.json());
        callback();
    });
}

glbl = {
    doRequest: doRequest
}

enter image description here

Затем вМой основной тест (простой GET для Google), у меня есть это в сценарии предварительного запроса:

glbl.doRequest(() => console.log('works!'));

Однако обратный вызов никогда не вызывается, и журнал "запрос отправлен" никогда не печатается.
Это вывод моей консоли почтальона:

ready to send request 11:58:02.257
GET http://www.google.com 11:58:02.262

Вы знаете, что я делаю неправильно?
Я также могу предоставить экспортированную коллекцию, если это поможет.

Спасибо!

Редактировать: это я перемещаю все в сценариях предварительного запроса запроса (не коллекции), все работает отлично

1 Ответ

0 голосов
/ 27 ноября 2018

Здесь происходит несколько вещей.

Локальные проблемы с областями видимости

В вашей переменной glbl отсутствует var, const или letключевое слово.

Отсутствие этого ключевого слова не приводит к тому, что переменная всплывает и сама становится глобальной.Среда Сценарий предварительного запроса и Сценарий предварительного запроса имеют разные области действия.

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

Создание глобальных функций

Почтальон имеет возможность создавать свои собственные глобальные переменные.Это может быть сделано программно через pm.globals.set и pm.globals.get.https://www.getpostman.com/docs/v6/postman/environments_and_globals/variables#accessing-variables-through-scripts

Существуют некоторые ограничения для этих переменных: вы можете хранить в них только строки, поэтому созданный вами объект и функция не сохранятся, если мы не сделаем что-то для изменения их типа.

В этом случае, прежде чем мы установим какие-либо переменные, мы должны убедиться, что мы:

  • toString любые функции
  • JSON.stringify любые объекты

Теперь скрипт предварительного запроса для нашей коллекции будет выглядеть так:

const doRequest = (callback) => {
    const echoPostRequest = {
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: 'headername1:value1',
        body: {
            mode: 'raw',
            raw: JSON.stringify({ key: 'this is json' })
        }
    };
    console.log('ready to send request');
    pm.sendRequest(echoPostRequest, function (err, res) {
        console.log('request sent', err ? err : res.json());
        callback();
    });
};

const glbl = {
    doRequest: doRequest.toString()
};

pm.globals.set('glbl', JSON.stringify(glbl));

Чтобы использовать это на уровне запроса, нам также необходимо обновить наш сценарий предварительного запроса:

const glbl = JSON.parse(pm.globals.get('glbl'));
const doRequest = eval(glbl.doRequest);

doRequest(() => console.log('works!'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...