View on GitHub

TestGAS Reference

TestGAS helps you write better Google Apps Script

The TestGAS library makes it easy to write small tests on Google Apps Script, yet scales to support complex functional testing for applications and libraries.

TestGAS_logo_chr.png

Usage

Import

You can import this library by this script ID.

1CRjWWWYfjD7WzPl43RB1BiD7XDLJmR03eEpXr2LMh75yAq5qMlczOIfm

If you cannot use...

Maybe, your files are older than this library.

So, you should remake .gs script files to use this library.

Getting started

An example of a simple test:

// content of test_sample.gs
let tester = TestGAS.createExecutor();

function sample(x){
  return x + 1;
}

class Test_sample{
  test_sample_1(){
    tester.assertEquals(sample(2), 4);
  }
  test_sample_2(){
    tester.assertNotEquals(sample(2), 4);
  }
}

function execute_Test_sample(){
  let failureFuncs = tester.executeTestGas(Test_sample);
}

Result of executing execute_Test_sample:

[ 'test_sample_1', 'test_sample_2' ]
TestGAS starts: "Test_sample"
...... TestGAS terminated: "Test_sample".
====================================================== FAILURES ======================================================
______________________________________________ test_sample_1 ______________________________________________
AssertionError: Actual value is not equal to Expected value.
  actual : 3
  expected: 4
=================== 1 failed, 1 passed of all 2 tests in 0.01 seconds ===================
    

Features

  • Require Apps Script runtime powered by V8.
  • Methods

  • createExecutor
  • Executor.executeTestGas
  • Executor.assertEquals
  • Executor.assertEqualsArrayLength
  • Executor.assertEqualsArrayItems
  • Executor.assertNotEquals
  • Executor.assertError
  • Executor.assertNotError
  • Reference

    createExecutor ()

    Creates Executor object.

    Executor runs test and display result of test.

    Arguments

    name type description
    (nothing) (nothing) (nothing)

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_plus_1_1(){
        const actual = 1 + 2;
        const expected = 3;
        tester.assertEquals(actual, expected);
      }
      test_plus_1_2(){
        const actual = 2 + 3;
        const expected = 5;
        tester.assertEquals(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    Executor.executeTestGas (executingTestClass, arraySkippingTest=[])

    Runs test and display result of test.

    Arguments

    name type description
    executingTestClass Object Executor of TestGAS.
    arraySkippingTest string[] array of functions that test is being skipped.

    Example

    class Test_TestGas{
      test_plus_1_1(){
        const actual = 1 + 2;
        const expected = 3;
        tester.assertEquals(actual, expected);
      }
      test_plus_1_2(){
        const actual = 2 + 3;
        const expected = 5;
        tester.assertEquals(actual, expected);
      }
      test_plus_1_3(){
        const actual = 3 + 4;
        const expected = 7;
        tester.assertEquals(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      const arraySkippingTest = ["test_plus_1_3"];
      let failureFuncs = tester.executeTestGas(Test_TestGas, arraySkippingTest);
    }

    tester.executeTestGas(Test_TestGas) returns array of functions that test failed from Test_TestGas object.


    Furthermore, you can specify testcases that you don't wanna test.

    In the code above, test_plus_1_3 is skipped in the test.

    Executor.assertEquals (actual, expected, willOutputErrorToReport=true)

    Asserts that actual value and expected value are same or not.

    Arguments

    name type description
    actual any Actual value.
    expected any Expected value.
    willOutputErrorToReport boolean Set true if you wanna display result of a testcase. Set false otherwise.
    let tester = createExecutor();
    class Test_TestGas{
      test_plus_1_1(){
        const actual = 1 + 2;
        const expected = 3;
        tester.assertEquals(actual, expected);
      }
      test_plus_1_2(){
        const actual = 2 + 3;
        const expected = 6;
        tester.assertEquals(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    test_arrayLength_1_1's test is passing. test_arrayLength_1_2's test is failing.

    Executor.assertEqualsArrayLength (actual, expected, willOutputErrorToReport=true)

    Asserts that actual array and expected array are same or not in the point of view of length.

    Arguments

    name type description
    actual any Actual array.
    expected any Expected array.
    willOutputErrorToReport boolean Set true if you wanna display result of a testcase. Set false otherwise.

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_arrayLength_1_1(){
        const actual = ["t", "e", "s", "t"];
        const expected = ["g", "a", "p", "s"];
        tester.assertEqualsArrayLength(actual, expected);
      }
      test_arrayLength_1_2(){
        const actual = ["t", "e", "s", "t"];
        const expected = ["t", "e", "s", "t", "g"];
        tester.assertEqualsArrayLength(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    test_arrayLength_1_1's test is passing. test_arrayLength_1_2's test is failing.

    Executor.assertEqualsArrayItems (actual, expected, willOutputErrorToReport=true)

    Asserts that actual array and expected array are same or not.

    Arguments

    name type description
    actual any Actual array.
    expected any Expected array.
    willOutputErrorToReport boolean Set true if you wanna display result of a testcase. Set false otherwise.

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_arrayLength_1_1(){
        const actual = ["t", "e", "s", "t"];
        const expected = ["t", "e", "s", "t"];
        tester.assertEqualsArrayItems(actual, expected);
      }
      test_arrayLength_1_2(){
        const actual = ["t", "e", "s", "t"];
        const expected = ["t", "e", "s", "t", "g"];
        tester.assertEqualsArrayItems(actual, expected);
      }
      test_arrayLength_1_3(){
      const actual = ["t", "e", "s", "t"];
      const expected = ["t", "s", "e", "t"];
      tester.assertEqualsArrayItems(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    test_arrayLength_1_1's test is passing.

    Tests of test_arrayLength_1_2 and test_arrayLength_1_3 are failing.

    Executor.assertNotEquals (actual, expected)

    Asserts that actual value and expected value are NOT same or same.

    Arguments

    name type description
    actual any Actual value.
    expected any Expected value.

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_plus_1_1(){
        const actual = 1 + 2;
        const expected = 4;
        tester.assertNotEquals(actual, expected);
      }
      test_plus_1_2(){
        const actual = 2 + 3;
        const expected = 5;
        tester.assertNotEquals(actual, expected);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    test_arrayLength_1_1's test is passing. test_arrayLength_1_2's test is failing.

    Executor.assertError (func, funcArgs, expectedErrorName, willOutputErrorToReport=true)

    Asserts that a function call raises expected_exception or raise a failure exception otherwise.

    Arguments

    name type description
    func Function A function targeted for test.
    funcArgs any[] Arguments of function.
    expectedErrorName Error Error name you expect.
    willOutputErrorToReport boolean Set true if you wanna display result of a testcase. Set false otherwise.

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_arrayLengthIsOneToItem_2_3(){
        const arrays = ["aaa", "bbb", "ccc", "vvv", "wwww", "xxxxx"];
        tester.assertError(arrayLengthIsOneToItem, [arrays], RangeError);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    If that function arrayLengthIsOneToItem(arrays) throws RangeError, that assertion is passing.

    Executor.assertNotError (func, funcArgs, expectedErrorName, willOutputErrorToReport=true)

    Asserts that a function call NOT raises expected_exception or raise a failure exception otherwise.

    Arguments

    name type description
    func Function A function targeted for test.
    funcArgs any[] Arguments of function.
    expectedErrorName Error Error name you don't expect that it may thrown.
    willOutputErrorToReport boolean Set true if you wanna display result of a testcase. Set false otherwise.

    Example

    let tester = createExecutor();
    class Test_TestGas{
      test_arrayLengthIsOneToItem_2_4(){
        const arrays = ["aaa", "bbb", "ccc", "vvv", "wwww", "xxxxx"];
        tester.assertNotError(arrayLengthIsOneToItem, [arrays], RangeError);
      }
    }
    function execute_Test_utilForTestGas(){
      let failureFuncs = tester.executeTestGas(Test_TestGas);
    }

    If that function arrayLengthIsOneToItem(arrays) doesn't throw RangeError, that assertion is passing.

    Useful Links

    TestGAS @ GitHub

    Issue Tracker