| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // Note: emits and listener fallthrough is tested in
- // ./rendererAttrsFallthrough.spec.ts.
- import { mockWarn } from '@vue/shared'
- import { render, defineComponent, h, nodeOps } from '@vue/runtime-test'
- import { isEmitListener } from '../src/componentEmits'
- describe('emits option', () => {
- mockWarn()
- test('trigger both raw event and capitalize handlers', () => {
- const Foo = defineComponent({
- render() {},
- created() {
- // the `emit` function is bound on component instances
- this.$emit('foo')
- this.$emit('bar')
- }
- })
- const onfoo = jest.fn()
- const onBar = jest.fn()
- const Comp = () => h(Foo, { onfoo, onBar })
- render(h(Comp), nodeOps.createElement('div'))
- expect(onfoo).toHaveBeenCalled()
- expect(onBar).toHaveBeenCalled()
- })
- test('trigger hyphendated events for update:xxx events', () => {
- const Foo = defineComponent({
- render() {},
- created() {
- this.$emit('update:fooProp')
- this.$emit('update:barProp')
- }
- })
- const fooSpy = jest.fn()
- const barSpy = jest.fn()
- const Comp = () =>
- h(Foo, {
- 'onUpdate:fooProp': fooSpy,
- 'onUpdate:bar-prop': barSpy
- })
- render(h(Comp), nodeOps.createElement('div'))
- expect(fooSpy).toHaveBeenCalled()
- expect(barSpy).toHaveBeenCalled()
- })
- test('warning for undeclared event (array)', () => {
- const Foo = defineComponent({
- emits: ['foo'],
- render() {},
- created() {
- // @ts-ignore
- this.$emit('bar')
- }
- })
- render(h(Foo), nodeOps.createElement('div'))
- expect(
- `Component emitted event "bar" but it is not declared`
- ).toHaveBeenWarned()
- })
- test('warning for undeclared event (object)', () => {
- const Foo = defineComponent({
- emits: {
- foo: null
- },
- render() {},
- created() {
- // @ts-ignore
- this.$emit('bar')
- }
- })
- render(h(Foo), nodeOps.createElement('div'))
- expect(
- `Component emitted event "bar" but it is not declared`
- ).toHaveBeenWarned()
- })
- test('validator warning', () => {
- const Foo = defineComponent({
- emits: {
- foo: (arg: number) => arg > 0
- },
- render() {},
- created() {
- this.$emit('foo', -1)
- }
- })
- render(h(Foo), nodeOps.createElement('div'))
- expect(`event validation failed for event "foo"`).toHaveBeenWarned()
- })
- test('isEmitListener', () => {
- expect(isEmitListener(['click'], 'onClick')).toBe(true)
- expect(isEmitListener(['click'], 'onclick')).toBe(true)
- expect(isEmitListener({ click: null }, 'onClick')).toBe(true)
- expect(isEmitListener({ click: null }, 'onclick')).toBe(true)
- expect(isEmitListener(['click'], 'onBlick')).toBe(false)
- expect(isEmitListener({ click: null }, 'onBlick')).toBe(false)
- })
- })
|