diff --git a/core/src/utils/keyboard/keyboard.ts b/core/src/utils/keyboard/keyboard.ts index 2b43d3cacb..f87f00e6fc 100644 --- a/core/src/utils/keyboard/keyboard.ts +++ b/core/src/utils/keyboard/keyboard.ts @@ -31,7 +31,7 @@ export const startKeyboardAssist = (win: Window) => { * how it resizes such that the Visual Viewport API is not * reliable here. */ - if (nativeEngine !== undefined) { + if (nativeEngine) { startNativeListeners(win); } else { if (!(win as any).visualViewport) { diff --git a/core/src/utils/keyboard/test/keyboard.spec.ts b/core/src/utils/keyboard/test/keyboard.spec.ts index e732fae730..52825703e3 100644 --- a/core/src/utils/keyboard/test/keyboard.spec.ts +++ b/core/src/utils/keyboard/test/keyboard.spec.ts @@ -38,6 +38,12 @@ const mockVisualViewport = ( return win; }; +const mockCapacitor = (win: Window) => { + win.Capacitor = { + isPluginAvailable: () => false, + }; +}; + const resizeVisualViewport = (win: Window, visualViewport: any = {}) => { win.visualViewport = Object.assign(win.visualViewport, visualViewport); @@ -251,3 +257,19 @@ describe('Keyboard Assist Integration', () => { expect(window.dispatchEvent.mock.calls.length).toEqual(0); }); }); + +describe('Keyboard Assist with Capacitor', () => { + beforeEach(() => { + resetKeyboardAssist(window); + mockCapacitor(window); + mockVisualViewport(window); + startKeyboardAssist(window); + }); + + it('should attach visual viewport listeners when Capacitor is available but the Keyboard plugin is not', () => { + resizeVisualViewport(window, { width: 320, height: 350 }); + + expect(window.dispatchEvent.mock.calls.length).toEqual(1); + expect(window.dispatchEvent.mock.calls[0][0].type).toEqual(KEYBOARD_DID_OPEN); + }); +});