Сохранение переменных среды Postman работает неправильно? - PullRequest
1 голос
/ 05 февраля 2020

При экспорте переменных среды в моих тестовых сценариях и сценариях перед запросом я испытываю странные вещи. Давайте возьмем следующий код:

var temp = ["a", "b", "c"];
pm.environment.set("Array1", temp);
temp.length=0;
temp = ["1", "2", "3"];
pm.environment.set("Array2", temp);
temp.length=0;
temp = ["ZZ", "YY", "XX"];
pm.environment.set("Array3", temp);
console.log(pm.environment.get("Array1")); // expected = ["a", "b", "c"]
console.log(pm.environment.get("Array2")); // expected = ["1", "2", "3"]
console.log(pm.environment.get("Array3")); // expected = ["ZZ", "YY", "XX"]

Я ожидаю, что все 3 массива будут иметь значение правильно? Удивительно, но результаты:

[]
[]
["ZZ", "YY", "XX"]

Только последний является правильным. И я могу продолжать использовать больше массивов, каждый раз, только последний действительно обновляется, все остальные остаются отчаянно пустыми. Я не понимаю, что не так. Кроме того, я попробовал postman.setEnvironmentVariable вместо pm.environment.set, и это сработало find. Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2020

FWIW, на самом деле это не вопрос почтальона. Это вопрос о Javascript. Я ничего не знаю о Postman, но его pm.environment.set() метод, очевидно, сохраняет ссылку на объект массива, а не делает копию. Когда вы впоследствии делаете temp.length = 0;, вы обрезаете этот объект массива так, чтобы он имел ноль элементов. Когда вы впоследствии делаете temp = ['new', 'array'];, вы создаете новый объект массива и присваиваете ссылку на него в temp var. Затем вы передаете эту новую ссылку на объект массива следующей pm.environment.set(). Обратите внимание, что утверждение temp.length = 0; не является необходимым и источником вашей проблемы.

См. https://www.w3schools.com/js/js_arrays.asp

PS, мне любопытно, какую документацию вы прочитали, что подразумевается делать temp.length = 0; было правильно.

...