import * as glassEasel from 'glass-easel' import { tmpl } from './base/env' import { MiniProgramEnv } from '../src' const domHtml = (elem: glassEasel.Element): string => { const domElem = elem.getBackendElement() as unknown as Element return domElem.innerHTML } describe('data update', () => { test('various data update', () => { const env = new MiniProgramEnv() const codeSpace = env.createCodeSpace('', true) codeSpace.addComponentStaticConfig('path/to/comp', {}) codeSpace.addCompiledTemplate( 'path/to/comp', tmpl(`
{{item}}
{{obj.sub}} `), ) codeSpace.componentEnv('path/to/comp', ({ Component }) => { Component() .data(() => ({ arr: [1, 2, 3], obj: { sub: false, }, })) .lifetime('attached', function () { this.groupUpdates(() => { this.spliceArrayDataOnPath(['arr'], 1, 1, [4, 5]) this.replaceDataOnPath(['obj', 'sub'], true) }) // eslint-disable-next-line no-use-before-define expect(domHtml(root.getComponent())).toBe( '
1
4
5
3
true', ) this.groupSetData(() => { this.updateData({ arr: [123], }) }) // eslint-disable-next-line no-use-before-define expect(domHtml(root.getComponent())).toBe( '
1
4
5
3
true', ) this.applyDataUpdates() // eslint-disable-next-line no-use-before-define expect(domHtml(root.getComponent())).toBe('
123
true') }) .register() }) const ab = env.associateBackend() const root = ab.createRoot('body', codeSpace, 'path/to/comp') glassEasel.Element.pretendAttached(root.getComponent()) expect(domHtml(root.getComponent())).toBe('
123
true') }) test('setData callback', () => new Promise((resolve) => { const env = new MiniProgramEnv() const codeSpace = env.createCodeSpace('', true) codeSpace.addComponentStaticConfig('path/to/comp', {}) codeSpace.addCompiledTemplate( 'path/to/comp', tmpl(` {{a}} `), ) codeSpace.componentEnv('path/to/comp', ({ Component }) => { Component() .data(() => ({ a: 123, })) .init(function ({ setData, lifetime }) { lifetime('attached', () => { setData({ a: 789 }, () => { this.setData({ a: 456 }, () => { // eslint-disable-next-line no-use-before-define expect(domHtml(root.getComponent())).toBe('456') resolve(undefined) }) }) }) }) .register() }) const ab = env.associateBackend() const root = ab.createRoot('body', codeSpace, 'path/to/comp') glassEasel.Element.pretendAttached(root.getComponent()) expect(domHtml(root.getComponent())).toBe('789') })) })