code: def test_multi_prop_callback_on_assignment_layout_nested(self):
      fn_titlefont = MagicMock()
      fn_xaxis = MagicMock()
      fn_layout = MagicMock()
  
      # Register callback on change to family property under titlefont
      self.figure.layout.xaxis.titlefont.on_change(
          fn_titlefont, "family"
      )
  
      # Register callback on the range and titlefont.family properties
      # under xaxis
      self.figure.layout.xaxis.on_change(
          fn_xaxis, "range", "title.font.family"
      )
  
      # Register callback on xaxis object itself
      self.figure.layout.on_change(fn_layout, "xaxis")
  
      # Assign a new xaxis range and titlefont.family
      self.figure.layout.xaxis.title.font.family = "courier"
  
      # Check that all callbacks were executed once
      fn_titlefont.assert_called_once_with(
          self.figure.layout.xaxis.title.font, "courier"
      )
  
      fn_xaxis.assert_called_once_with(
          self.figure.layout.xaxis, (-1, 4), "courier"
      )
  
      fn_layout.assert_called_once_with(
          self.figure.layout,
          go.layout.XAxis(
              range=(-1, 4), title={"font": {"family": "courier"}}
          ),
      )
  
imports: import sys
  from unittest import TestCase
  import pytest
  import plotly.graph_objs
label_desc: Use image node_id 9 for calling the TestOnChangeCallbacks obj's underlying member method code with example usage: obj.test_multi_prop_callback_on_assignment_layout_nested() without return types