validateConnectInfo = ci => {
              // More than a first param connectInfo as been provided
              if (args.length > 1) {
                throw Errors.NoMatchingSignature
              }
              // An empty connectInfo has been provided
              if (Object.keys(ci).length === 0) {
                throw Errors.MustSpecifyExtensionID
              }
              // Loop over all connectInfo props an check them
              Object.entries(ci).forEach(([k, v]) => {
                const isExpected = ['name', 'includeTlsChannelId'].includes(k)
                if (!isExpected) {
                  throw new TypeError(
                    errorPreamble + `Unexpected property: '${k}'.`
                  )
                }
                const MismatchError = (propName, expected, found) =>
                  TypeError(
                    errorPreamble +
                      `Error at property '${propName}': Invalid type: expected ${expected}, found ${found}.`
                  )
                if (k === 'name' && typeof v !== 'string') {
                  throw MismatchError(k, 'string', typeof v)
                }
                if (k === 'includeTlsChannelId' && typeof v !== 'boolean') {
                  throw MismatchError(k, 'boolean', typeof v)
                }
              })
            }
Mock `chrome.runtime.connect`

@see https://developer.chrome.com/apps/runtime#method-connect