From 9b516e53ef9210cb14facc4075b5ac081571f654 Mon Sep 17 00:00:00 2001 From: hiendv Date: Wed, 4 Dec 2019 17:58:09 +0700 Subject: [PATCH 1/2] fix: whitelist tags to be ignored with `disabled` attribute --- packages/test-utils/src/wrapper.js | 21 +++++++++++++++++++-- test/specs/wrapper/trigger.spec.js | 9 +++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/test-utils/src/wrapper.js b/packages/test-utils/src/wrapper.js index 956227a8b..2a7326d8c 100644 --- a/packages/test-utils/src/wrapper.js +++ b/packages/test-utils/src/wrapper.js @@ -574,8 +574,25 @@ export default class Wrapper implements BaseWrapper { ) } - // Don't fire event on a disabled element - if (this.attributes().disabled) { + /** + * Avoids firing events on specific disabled elements + * See more: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled + */ + + const supportedTags = [ + 'BUTTON', + 'COMMAND', + 'FIELDSET', + 'KEYGEN', + 'OPTGROUP', + 'OPTION', + 'SELECT', + 'TEXTAREA', + 'INPUT' + ] + const tagName = this.element.tagName + + if (this.attributes().disabled && supportedTags.indexOf(tagName) > -1) { return } diff --git a/test/specs/wrapper/trigger.spec.js b/test/specs/wrapper/trigger.spec.js index 79c78511c..82d242e5e 100644 --- a/test/specs/wrapper/trigger.spec.js +++ b/test/specs/wrapper/trigger.spec.js @@ -123,7 +123,8 @@ describeWithShallowAndMount('trigger', mountingMethod => { it('does not fire on disabled elements', () => { const clickHandler = sandbox.stub() const TestComponent = { - template: '', props: ['clickHandler'] } - const wrapper = mountingMethod(TestComponent, { + const buttonWrapper = mountingMethod(ButtonComponent, { propsData: { clickHandler } }) - - wrapper.find('button').trigger('click') + buttonWrapper.trigger('click') expect(clickHandler.called).to.equal(false) - wrapper.find('a').trigger('click') + const changeHandler = sandbox.stub() + const InputComponent = { + template: '', + props: ['changeHandler'] + } + const inputWrapper = mountingMethod(InputComponent, { + propsData: { + changeHandler + } + }) + inputWrapper.trigger('change') + expect(changeHandler.called).to.equal(false) + }) + + it('fires on invalid disabled elements', () => { + const clickHandler = sandbox.stub() + const LinkComponent = { + template: 'Link', + props: ['clickHandler'] + } + const linkWrapper = mountingMethod(LinkComponent, { + propsData: { + clickHandler + } + }) + linkWrapper.trigger('click') expect(clickHandler.called).to.equal(true) })