$refs.spec.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { haveText, html, test } from '../../utils'
  2. test('can reference elements from event listeners',
  3. html`
  4. <div x-data="{}">
  5. <button x-on:click="$refs['bob'].textContent = 'lob'"></button>
  6. <span x-ref="bob"></span>
  7. </div>
  8. `,
  9. ({ get }) => {
  10. get('button').click()
  11. get('span').should(haveText('lob'))
  12. }
  13. )
  14. test('can reference elements from data object methods',
  15. html`
  16. <div x-data="{ foo() { this.$refs.bob.textContent = 'lob' } }">
  17. <button x-on:click="foo()"></button>
  18. <span x-ref="bob"></span>
  19. </div>
  20. `,
  21. ({ get }) => {
  22. get('button').click()
  23. get('span').should(haveText('lob'))
  24. }
  25. )
  26. test('can reference elements from x-init',
  27. html`
  28. <div x-data x-init="$refs.foo.textContent = 'lob'">
  29. <span x-ref="foo">bob</span>
  30. </div>
  31. `,
  32. ({ get }) => {
  33. get('span').should(haveText('lob'))
  34. }
  35. )
  36. test('can reference elements outside of x-init',
  37. html`
  38. <div x-data x-ref="foo" data-foo="bar">
  39. <div x-init="() => {}">
  40. <span x-text="$refs.foo.dataset.foo"></span>
  41. </div>
  42. </div>
  43. `,
  44. ({ get }) => {
  45. get('span').should(haveText('bar'))
  46. }
  47. )
  48. test('can reference refs of parent scope',
  49. html`
  50. <div x-data x-ref="foo" data-foo="bar">
  51. <div x-data>
  52. <span x-text="$refs.foo.dataset.foo"></span>
  53. </div>
  54. </div>
  55. `,
  56. ({ get }) => {
  57. get('span').should(haveText('bar'))
  58. }
  59. )
  60. test('when referencing refs from parent scope, the closest ref is used',
  61. html`
  62. <div x-data x-ref="foo" data-foo="bar">
  63. <div x-data x-ref="foo" data-foo="baz">
  64. <span x-text="$refs.foo.dataset.foo"></span>
  65. </div>
  66. </div>
  67. `,
  68. ({ get }) => {
  69. get('span').should(haveText('baz'))
  70. }
  71. )