Google Apps Script: как запустить все функции в файле .gs? - PullRequest
1 голос
/ 09 апреля 2020

Я пишу свой собственный тестовый прогон для скрипта Google Apps. Я хочу поместить все свои тесты в один (или несколько) файлов. Затем я сообщу бегущему, в каком файле (файлах) есть мои тесты, и он должен go просмотреть каждый файл и запустить все функции в нем.

Однако для этого мне необходимо:

  1. Укажите, какие файлы содержат тесты.
  2. Выполните итерацию по каждому указанному файлу и найдите все функции.
  3. Запустите эти функции.

Я попробовал следующий код для идентификации функций, но его объект this, кажется, ссылается на всю мою кодовую базу GAS, поэтому он возвращает все функции во всей моей кодовой базе:

function functions() {
  for(var i in this) {
    if((typeof this[i]).toString()=="function" && this[i].toString().indexOf("native")==-1){
      Logger.log(this[i].name);
    }
  }
}

Есть предложения?

1 Ответ

0 голосов
/ 17 апреля 2020

Я создал решение на основе предложения @ TheMaster. Все мои тестовые функции названы с префиксом test_.

Используется блок try...finally, потому что, если какой-либо из тестов выдает исключение и отменяет выполнение теста, я хочу, чтобы блок finally сообщал.

// Run all tests that begin with "test_" from any file.
function run_tests() {
  Logger.log("------ RUNNING TESTS ------", 1);
  try {
    var successes = 0, failures = 0;

    // 'this' refers to the global GAS environment
    for(var i in this) {
      // Find all functions whose names begin with test_
      if(  
        (typeof this[i]).toString()=="function" && 
        this[i].toString().indexOf("native")==-1 &&
        this[i].name.indexOf("test_")==0
        ) 
        {
          // Run a found test.
          var result = eval(this[i].name + "()"); 
          // Increment the count of successes and failures.
          (result) ? successes++ : failures++; 
          Logger.log(`Ran test ${this[i].name} with result ${result ? 'SUCCESS' : 'FAILURE'}`);
        }
    }
  } catch(e) {
    failures++;
  } finally {

    var testcount = successes + failures;
    Logger.log(`----- Ran ${testcount} tests with ${successes} successes and ${failures} failures. :alarm_clock:`, (failures) ? 0 : 1);

  }
}

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