Почему я не могу добавить простую функцию многократного использования в Почтальон? - PullRequest
1 голос
/ 26 марта 2019

В Почтальоне я пытаюсь добиться следующего:

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

Однако ни одна из многих реализаций, которые я видел, разбросанных по сети, не работает.Я могу пройти весь путь до шага 2.2, и тогда все просто умрут ужасной пламенной смертью.Механизм JavaScript под Postman отказывается оценивать объект, хранящийся в коллекции globals.

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

postman.setGlobalVariable("loadUtils", function utils() {
    let utils = {};
    utils.main = function() {
        console.log("Hello, world!");
    }
    return utils;
} + ';utils()');

Затем я пытаюсь загрузить этот скрипт следующим образом:

var code = globals.loadUtils;
console.log(code);
var utils = eval('(' + code + ')');

Но всегда возникает следующая ошибка:

Произошла ошибкапри оценке тестового сценария: SyntaxError: неожиданный токен;

Я попытался:

  • Преобразование всей функции в многострочную строку и сохранение этого результата в глобальной среде,Произошла та же ошибка.
  • Включение заключающих скобки непосредственно в тело функции.Это тоже не сработало.
  • Использование лямбда-выражений, но это вызвало всевозможные проблемы в самом редакторе.

Я уверен, что это что-то простое, глупоеи очевидно, и что я просто не вижу этого.

Может кто-нибудь указать, что я здесь не так делаю?

PS Это должно быть возможно, как предложено здесьStackOverflow и Форумы почтальонов на GitHub (хотя для просмотра решения требуется прокрутить комментарии).

1 Ответ

2 голосов
/ 26 марта 2019

Вы храните два оператора в виде строки, разделенных точкой с запятой:

 "function utils() { /*...*/ }; utils()"

затем вы заключаете эту строку в скобки и пытаетесь выполнить ее:

eval("(function { /*...*/ }; utils())")

, который не будет работать, так как ; внутри выражения является синтаксической ошибкой.

Вы или удаляете паренсы, заменяете точку с запятой двоеточием или используете IIFE (что я бы предпочел здесь):

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