code: def test_value_error_on_bad_attr(self) -> None:
      m1 = SomeModel()
      m2 = SomeModel()
      with pytest.raises(ValueError) as e:
          m1.js_link("junk", m2, "b")
      assert str(e.value).endswith(
          f"'junk' is not a property of self ({m1!r})"
      )
  
imports: from __future__ import annotations
  import pytest
  from bokeh.core.has_props import is_abstract
  from bokeh.core.properties import Int, List, String
  from bokeh.core.types import ID
  from bokeh.models import *
  from bokeh.models import CustomJS
  from bokeh.plotting import *
  from bokeh.document import document
  from bokeh.model import Model
label_desc: Use image node_id 1 for calling the Test_js_link obj's underlying member method code with example usage: obj.test_value_error_on_bad_attr() without return types