function EnvironmentTest(name, ref, scope, objChain) {
  EnvironmentTest.base(this, 'constructor', name, ref, scope, objChain);

  /**
   * @type {!Array<function()>}
   */
  this.configureEnvironments =
      (objChain || [])
          .filter((obj) => typeof obj.configureEnvironment === 'function')
          .map(/**
                * @param  {{configureEnvironment: function()}} obj
                * @return {function()}
                */
               function(obj) {
                 return obj.configureEnvironment.bind(obj);
               });
}
An internal Test used to hook environments into the JsUnit test runner.
@param {string} name The test name.
@param {function()} ref Reference to the test function or test object.
@param {?Object=} scope Optional scope that the test function should be
    called in.
@param {!Array<!Object>=} objChain A chain of objects used to populate setUps
    and tearDowns.
@private
@final
@constructor
@extends {TestCase.Test}