Как я могу тестировать функцию disparadora (активатор) в Google Аппс Скрипт

Google Аппс Скрипт выносит стрелки (Triggers), также так называемые активаторы, которые перемещают события (Events) в функции disparadoras/activadoreas, чтобы стрелять / включать в функции. К сожалению атмосфера разработки не позволяет тестировать функции, не перемещая параметров, так что не возможно симулировать событие этой формы. Когда он пробуется, она оказывается ошибкой как:

ReferenceError: 'e' is not defined.

Один может относиться к событию как к опциональному параметру и вводить стоимость, предопределенную в функции disparadora используя техники "Is there в better way to do optional function parameters in Javascript?". Но это вводит риск, которого ленивый программист (кто сказал я?) он оставит этот код с боковыми не умышленными эффектами.

С полной уверенностью есть лучшие способы.

Ссылки
Основанный на How, хан I тест в trigger function in ГАЗ? из-за Mogsdad редактирование 2014-11-14 19:40:55Z

2
задан 29.03.2019, 17:50
1 ответ

Напиши функцию доказательства, которое перемещало бы событие, симулируемое в функцию disparadora. Здесь включается пример, который тестирует функцию disparadora onEdit(). Эта перемещает объект события со всей информацией, описанной для "Спреадсеет Эдит Events" в Ундерстандинг Эвентс.

Чтобы использовать ее, стабильный прерывание в твоей функции цель onEdit, выбери функцию test_onEdit и кликни на Debug.

/*
 * Función de prueba para onEdit. Pasa un objento de evento para simular una
 * edición  a una celda en una hoja de cálculo 
 *
 * Para actualizaciones revisar https://stackoverflow.com/a/16089067/1677912
 *
 * Véase 
 * https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
 */

function test_onEdit() {
  onEdit({
    user : Session.getActiveUser().getEmail(),
    source : SpreadsheetApp.getActiveSpreadsheet(),
    range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
    value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
    authMode : "LIMITED"
  });
}

Если ты интересуешься, это было написано, чтобы тестировать функцию onEdit для Google Spreadsheet conditional on three cells.

Далее находится функция для событий отправления формуляров в рабочем листе. Этот строит притворное событие читая данные об отправлении формуляра. Это было написано оригинально для Хеттинг Типееррор in onFormSubmit trigger?.

/**
 * Función de prueba para funciones disparadoras en hojas de cálculo de
 * envío de formularios.
 * Recorre el contenido de la hoja, creando eventos de envío de formulario
 * simulados 
 *
 * Para actualizaciones revisar: https://stackoverflow.com/a/16089067/1677912
 *
 * Véase 
 * https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
 */

function test_onFormSubmit() {
  var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
  var data = dataRange.getValues();
  var headers = data[0];
  // Inicia en la fila 1, saltando los encabezados en la fila 0
  for (var row=1; row < data.length; row++) {
    var e = {};
    e.values = data[row].filter(Boolean);  // filtro: https://stackoverflow.com/a/19888749
    e.range = dataRange.offset(row,0,1,data[0].length);
    e.namedValues = {};
    // Recorre los encabezados para crear un objeto namedValues
    // NOTA: todos los namedValues son arreglos.
    for (var col=0; col<headers.length; col++) {
      e.namedValues[headers[col]] = [data[row][col]];
    }
    // Pasar el evento simulado a onFormSubmit
    onFormSubmit(e);
  }
}

Советы

Когда будут симулироваться события, быть осторожен соединения объектов события документов больше я нуждаюсь в том, чтобы было возможно.

  • Если хочется санкционировать документацию, могут регистрироваться события, полученные от функции disparadora.

    Logger.log( JSON.stringify( e , null, 2 ) );
    
    • В событиях отправления формуляров в рабочем листе:
    • вся стоимость namedValues - договоренности.
    • Отметки времени - цепи, и Ваш формат будет обнаружен в дорожку формуляра. Если он будет прочитан с рабочего листа с предопределенным форматом*, они будут объектами даты. Если функция disparadora зависит в формате цепи отметки времени (что плохая идея), быть осторожен обеспечивания себе, что симулируется стоимость apropiadamente.
    • Если в рабочем листе будут колонны, которые не в формуляре, техника в этом коде будет симулировать "событие" с этими добавочная стоимость включитесь, что не является тем, что будет получено от отправления формуляра.
    • Поскольку донесли enIssue на 4335, договоренность valores он отпустит ответы в мишени (в "новых формулярах" + "новый рабочий лист"). Метод filter(Boolean) он использован, чтобы симулировать это поведение.

*Ячейка с форматом "плоский текст" предохранит дату как цепь, и это не хорошая идея.

Ссылки
Ответ Mogsdad редактирование 2014-12-03 17:16:57Z.

2
ответ дан 03.12.2019, 23:21

Теги

Похожие вопросы