import Alpine from 'alpinejs' import { wait } from '@testing-library/dom' global.MutationObserver = class { observe() {} } test('$watch', async () => { document.body.innerHTML = `

` Alpine.start() expect(document.querySelector('h1').textContent).toEqual('bar') expect(document.querySelector('h2').textContent).toEqual('lob') document.querySelector('button').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('baz') expect(document.querySelector('h2').textContent).toEqual('baz') }) }) test('$watch nested properties', async () => { document.body.innerHTML = `

` Alpine.start() expect(document.querySelector('h1').textContent).toEqual('baz') expect(document.querySelector('h2').textContent).toEqual('lob') document.querySelector('button').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('law') expect(document.querySelector('h2').textContent).toEqual('law') }) }) test('$watch arrays', async () => { document.body.innerHTML = `

` Alpine.start() expect(document.querySelector('h1').textContent).toEqual('one') expect(document.querySelector('h2').textContent).toEqual('lob') document.querySelector('#push').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('one,two') expect(document.querySelector('h2').textContent).toEqual('one,two') }) document.querySelector('#pop').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('one') expect(document.querySelector('h2').textContent).toEqual('one') }) document.querySelector('#unshift').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('zero,one') expect(document.querySelector('h2').textContent).toEqual('zero,one') }) document.querySelector('#shift').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('one') expect(document.querySelector('h2').textContent).toEqual('one') }) document.querySelector('#assign').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('2,1,3') expect(document.querySelector('h2').textContent).toEqual('2,1,3') }) document.querySelector('#sort').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('1,2,3') expect(document.querySelector('h2').textContent).toEqual('1,2,3') }) document.querySelector('#reverse').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('3,2,1') expect(document.querySelector('h2').textContent).toEqual('3,2,1') }) }) test('$watch nested arrays', async () => { document.body.innerHTML = `

` Alpine.start() expect(document.querySelector('h1').textContent).toEqual('one') expect(document.querySelector('h2').textContent).toEqual('lob') document.querySelector('#push').click() await wait(() => { expect(document.querySelector('h1').textContent).toEqual('one,two') expect(document.querySelector('h2').textContent).toEqual('one,two') }) }) test('$watch with magic properties', async () => { document.body.innerHTML = `
` Alpine.addMagicProperty('self', function (el) { return el.__x.$data }) Alpine.start() expect(document.querySelector('span').textContent).toEqual('car') document.querySelector('button').click() await wait(() => { expect(document.querySelector('span').textContent).toEqual('far') }) })