nodejs/node · error · Exception

Missing property '%s'. If you see this error in testing, yo

Error message

Missing property '%s'. If you see this error in testing, you might need
to add the property to tools/testrunner/testdata/v8_build_config.json. If
you see this error in production, ensure to add the property to the
v8_dump_build_config action in V8's top-level BUILD.gn file.

What it means

Raised by BuildConfig.ensure_vars in deps/v8/tools/testrunner/build_config.py when a required build variable name is not present in the BuildConfig keys list (i.e. not loaded from the generated v8_build_config.json). The message points you to add the property either to the test fixture (tools/testrunner/testdata/v8_build_config.json) for tests or to the v8_dump_build_config GN action in the top-level BUILD.gn for production builds.

Source

Thrown at deps/v8/tools/testrunner/build_config.py:55

    for key, value in build_config.items():
      setattr(self, key, value)

    self.keys = list(build_config.keys())

    bool_options = [key for key, value in self.items() if value is True]
    string_options = [
      f'{key}="{value}"'
      for key, value in self.items() if value and isinstance(value, str)]
    self._str_rep = ', '.join(sorted(bool_options + string_options))

  def items(self):
    for key in self.keys:
      yield key, getattr(self, key)

  def ensure_vars(self, build_vars):
    for var in build_vars:
      if var not in self.keys:
        raise Exception(INITIALIZATION_ERROR % var)

  def timeout_scalefactor(self, initial_factor):
    """Increases timeout for slow build configurations."""
    result = initial_factor
    for key, value in SCALE_FACTOR.items():
      try:
        if getattr(self, key):
          result *= value
      except AttributeError:
        raise Exception(INITIALIZATION_ERROR % key)
    if self.arch in SLOW_ARCHS:
      result *= 4.5
    return result

  def __str__(self):
    return self._str_rep

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. In production: add the missing property to the v8_dump_build_config action in deps/v8/BUILD.gn so GN writes it to v8_build_config.json, then rebuild.
  2. In tests: add the property to tools/testrunner/testdata/v8_build_config.json so the test fixture has it.
  3. Regenerate the build (gn gen + ninja) so the build-config JSON is refreshed before running tests.

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

def ensure_build_vars_present(build_config, required):
    missing = [v for v in required if v not in build_config.keys]
    if missing:
        raise ValueError(f'Add missing build vars to BUILD.gn / v8_build_config.json: {missing}')

Type guard

def has_all_vars(build_config, required) -> bool:
    return all(v in build_config.keys for v in required)

Try / catch

null

Prevention

When it happens

Trigger: Code calls BuildConfig.ensure_vars([...]) with a var name that was never declared as a BuildConfig key. This happens when a new build-config consumer requests a variable that the build system hasn't been taught to dump yet.

Common situations: Adding a new test or perf feature that depends on a fresh GN variable (e.g. v8_enable_sandbox, v8_enable_maglev) but forgetting to register it in the build-config dump step; running tests against a stale build where v8_build_config.json is out of date.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/a296a345f1f333e5. Report an issue: GitHub.