Метод PropertiesService.getUserProperties()
не считается устаревшим.
На самом деле сообщение об ошибке является правильным. Существует существенное различие между JavaScript и JSON.
В JSON имена свойств объекта ДОЛЖНЫ быть двойными кавычки.
Посмотрите на следующий код для testSupport.gs
:
/** @define {string} */
var TEST_ENV_NAME_ = "S3LibraryTestEnv";
// todo: consider splitting into a generic testing lib?
// Format the TestEnv Object with property names in double quotes.
var S3LibraryTestEnv = '{"awsAccessKeyId":"theId","awsSecretKey":"theKey"}';
// Run test() to check it out
function test(){
setTestEnv(S3LibraryTestEnv);
}
/**
* sets a testing Env, that's accessible from test and demo functios; and persistent for user
*
* @param {Object} env the environment object to set for testing (should have awsAccessKeyId, awsSecretKey as properties)
* @return {void}
*/
function setTestEnv(env) {
var userProperties = PropertiesService.getUserProperties();
// env is a JSON format string eg. ("Property names must be double-quoted strings")
// No need to use JSON.stringify()
userProperties.setProperty(TEST_ENV_NAME_, env);
}
/**
* gets Test Env for the library, optionally skipping validing that all req constants are defined in that env
*
* @param {boolean}
* @return {Object} key-value for the environment
*/
function getTestEnv(skipEnvValidation) {
userProperties = PropertiesService.getUserProperties();
var env = JSON.parse(userProperties.getProperty(TEST_ENV_NAME_));
// Logger.log(env);
if (!skipEnvValidation) {
var requiredKeys = ["awsAccessKeyId", "awsSecretKey"];
if (env == null) {
throw "Must set environment in UserProperties (see setTestEnvFromUI)";
}
for (var i=0; i < requiredKeys.length; i++) {
if (typeof env[requiredKeys[i]] == 'undefined') {
throw "Test Environment is missing required property '" + requiredKeys[i] + "'. Define it object passed to setTestEnv().";
}
}
}
return env;
}
Также исправлены некоторые опечатки здесь и там.