fix: kebab-case events are attached correctly on web components, see #2841 (#2847)

This commit is contained in:
shadowings-zy
2021-02-09 14:58:36 +08:00
committed by GitHub
parent 1cc8712235
commit b302cbbbd3
2 changed files with 28 additions and 2 deletions

View File

@@ -153,4 +153,30 @@ describe(`runtime-dom: events patching`, () => {
expect(prevFn).toHaveBeenCalledTimes(2)
expect(nextFn).toHaveBeenCalledTimes(4)
})
// #2841
test('should patch event correctly in web-components', async () => {
class TestElement extends HTMLElement {
constructor() {
super()
}
}
window.customElements.define('test-element', TestElement)
const testElement = document.createElement('test-element', {
is: 'test-element'
})
const fn1 = jest.fn()
const fn2 = jest.fn()
// in webComponents, @foo-bar will patch prop 'onFooBar'
// and @foobar will patch prop 'onFoobar'
patchProp(testElement, 'onFooBar', null, fn1)
testElement.dispatchEvent(new CustomEvent('foo-bar'))
expect(fn1).toHaveBeenCalledTimes(1)
patchProp(testElement, 'onFoobar', null, fn2)
testElement.dispatchEvent(new CustomEvent('foobar'))
expect(fn2).toHaveBeenCalledTimes(1)
})
})