x-modelable.spec.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { haveText, html, test } from '../../utils'
  2. test('can expose data for x-model binding',
  3. html`
  4. <div x-data="{ outer: 'foo' }">
  5. <div x-data="{ inner: 'bar' }" x-modelable="inner" x-model="outer">
  6. <h1 x-text="outer"></h1>
  7. <h2 x-text="inner"></h2>
  8. <button @click="inner = 'bob'" id="1">change inner</button>
  9. <button @click="outer = 'lob'" id="2">change outer</button>
  10. </div>
  11. </div>
  12. `,
  13. ({ get }) => {
  14. get('h1').should(haveText('foo'))
  15. get('h2').should(haveText('foo'))
  16. get('#1').click()
  17. get('h1').should(haveText('bob'))
  18. get('h2').should(haveText('bob'))
  19. get('#2').click()
  20. get('h1').should(haveText('lob'))
  21. get('h2').should(haveText('lob'))
  22. }
  23. )
  24. test('Something like Livewire can hook into x-modelable',
  25. html`
  26. <h1 x-data="{ value: 'bar' }" x-modelable="value" x-init="
  27. () => {}; $el._x_modelable_hook = (val) => {
  28. return val.toUpperCase()
  29. }
  30. ">
  31. <span x-text="value"></span>
  32. </h1>
  33. `,
  34. ({ get }) => {
  35. get('span').should(haveText('BAR'))
  36. }
  37. )
  38. test('x-modelable works when inside x-bind and x-model is outside',
  39. html`
  40. <div x-data="{ outer: 'foo', thing: {
  41. ['x-modelable']: 'inner',
  42. } }">
  43. <div x-data="{ inner: 'bar' }" x-bind="thing" x-model="outer">
  44. <h1 x-text="outer"></h1>
  45. <h2 x-text="inner"></h2>
  46. <button @click="inner = 'bob'" id="1">change inner</button>
  47. <button @click="outer = 'lob'" id="2">change outer</button>
  48. </div>
  49. </div>
  50. `,
  51. ({ get }) => {
  52. get('h1').should(haveText('foo'))
  53. get('h2').should(haveText('foo'))
  54. get('#1').click()
  55. get('h1').should(haveText('bob'))
  56. get('h2').should(haveText('bob'))
  57. get('#2').click()
  58. get('h1').should(haveText('lob'))
  59. get('h2').should(haveText('lob'))
  60. }
  61. )