code: def check_graph_config_shape(dash_dcc):
      config_schema = dash_dcc.driver.execute_script(
          "return Plotly.PlotSchema.get().config;"
      )
      with open(os.path.join(dcc.__path__[0], "metadata.json")) as meta:
          graph_meta = json.load(meta)["src/components/Graph.react.js"]
          config_prop_shape = graph_meta["props"]["config"]["type"][
              "value"
          ]
  
      ignored_config = [
          "setBackground",
          "showSources",
          "logging",
          "globalTransforms",
          "notifyOnLogging",
          "role",
          "typesetMath",
      ]
  
      def crawl(schema, props):
          for prop_name in props:
              assert prop_name in schema
  
          for item_name, item in schema.items():
              if item_name in ignored_config:
                  continue
  
              assert item_name in props
              if "valType" not in item:
                  crawl(item, props[item_name]["value"])
  
      crawl(config_schema, config_prop_shape)
  
      assert dash_dcc.get_logs() == []
  
file_path: dash/components/dash-core-components/tests/integration/tab/test_tabs_with_graphs.py
imports: import werkzeug
  from dash import Dash, Input, Output, dcc, html
  from dash.exceptions import PreventUpdate
  import json
  import os
  import pytest
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support import expected_conditions
  from selenium.webdriver.support.ui import WebDriverWait
  import time
label_desc: Use image node_id 3 for calling a global function with example usage: check_graph_config_shape(dash_dcc) without return types