diff --git a/frontend/test/__support__/enzyme_utils.js b/frontend/test/__support__/enzyme_utils.js
index a748ba9f984fa43c6e7ec9c6082ce8a051b5e2de..b77bc55a21ff407fe4a6016e55e7625378b6027f 100644
--- a/frontend/test/__support__/enzyme_utils.js
+++ b/frontend/test/__support__/enzyme_utils.js
@@ -30,7 +30,7 @@ export const clickButton = (enzymeWrapper) => {
     }
 }
 
-export const setInputValue = (inputWrapper, value, { blur = true } = {}) => {
+export const setInputValue = (inputWrapper, value, { blur = true } = {}) => {
     inputWrapper.simulate('change', { target: { value: value } });
     if (blur) inputWrapper.simulate("blur")
 }
diff --git a/frontend/test/__support__/integrated_tests.js b/frontend/test/__support__/integrated_tests.js
index 80d5939ce0506fe0fab6fae503e59e9da2681b26..b6331c3e7bd84ec3c07ccfd0c71a637874c2ee6b 100644
--- a/frontend/test/__support__/integrated_tests.js
+++ b/frontend/test/__support__/integrated_tests.js
@@ -193,8 +193,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => {
             _onActionDispatched: null,
             _dispatchedActions: [],
             _finalStoreInstance: null,
-            _usingAppContainer: false,
-
 
             dispatch: (action) => {
                 const result = store._originalDispatch(action);
@@ -282,7 +280,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => {
 
             connectContainer: (reactContainer) => {
                 store.warnIfStoreCreationNotComplete();
-                store._usingAppContainer = false;
 
                 const routes = createRoutes(getRoutes(store._finalStoreInstance))
                 return store._connectWithStore(
@@ -296,7 +293,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => {
 
             getAppContainer: () => {
                 store.warnIfStoreCreationNotComplete();
-                store._usingAppContainer = true;
 
                 return store._connectWithStore(
                     <Router history={history}>
diff --git a/frontend/test/admin/datamodel/FieldApp.integ.spec.js b/frontend/test/admin/datamodel/FieldApp.integ.spec.js
index d25f17d5a3be837d1810a00177117a159be77e44..cad966f5918a678d1aa5afac16aa538e45bd4a55 100644
--- a/frontend/test/admin/datamodel/FieldApp.integ.spec.js
+++ b/frontend/test/admin/datamodel/FieldApp.integ.spec.js
@@ -7,8 +7,7 @@ import {
     clickButton,
     setInputValue,
     click
-} from "__support__/enzyme_utils";
-
+} from "__support__/enzyme_utils"
 import {
     DELETE_FIELD_DIMENSION,
     deleteFieldDimension,
@@ -130,7 +129,7 @@ describe("FieldApp", () => {
             const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID });
 
             const visibilitySelect = fieldApp.find(FieldVisibilityPicker);
-            visibilitySelect.simulate('click');
+            click(visibilitySelect);
             click(visibilitySelect.find(TestPopover).find("li").at(1).children().first());
 
             await store.waitForActions([UPDATE_FIELD])
@@ -166,7 +165,7 @@ describe("FieldApp", () => {
             const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID });
             const picker = fieldApp.find(SpecialTypeAndTargetPicker)
             const typeSelect = picker.find(Select).at(0)
-            typeSelect.simulate('click');
+            click(typeSelect);
 
             const noSpecialTypeButton = typeSelect.find(TestPopover).find("li").last().children().first()
             click(noSpecialTypeButton);
@@ -179,7 +178,7 @@ describe("FieldApp", () => {
             const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID });
             const picker = fieldApp.find(SpecialTypeAndTargetPicker)
             const typeSelect = picker.find(Select).at(0)
-            typeSelect.simulate('click');
+            click(typeSelect);
 
             const noSpecialTypeButton = typeSelect.find(TestPopover)
                 .find("li")
@@ -196,7 +195,7 @@ describe("FieldApp", () => {
             const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID });
             const picker = fieldApp.find(SpecialTypeAndTargetPicker)
             const typeSelect = picker.find(Select).at(0)
-            typeSelect.simulate('click');
+            click(typeSelect);
 
             const foreignKeyButton = typeSelect.find(TestPopover).find("li").at(2).children().first();
             click(foreignKeyButton);
@@ -205,14 +204,14 @@ describe("FieldApp", () => {
 
             expect(picker.text()).toMatch(/Foreign KeySelect a target/);
             const fkFieldSelect = picker.find(Select).at(1)
-            fkFieldSelect.simulate('click');
+            click(fkFieldSelect);
 
             const productIdField = fkFieldSelect.find(TestPopover)
                 .find("li")
                 .filterWhere(li => /The numerical product number./.test(li.text()))
                 .first().children().first();
 
-            productIdField.simulate('click')
+            click(productIdField)
             await store.waitForActions([UPDATE_FIELD])
             expect(picker.text()).toMatch(/Foreign KeyProducts → ID/);
         })
@@ -237,7 +236,7 @@ describe("FieldApp", () => {
             const mappingTypePicker = section.find(Select).first();
             expect(mappingTypePicker.text()).toBe('Use original value')
 
-            mappingTypePicker.simulate('click');
+            click(mappingTypePicker);
             const pickerOptions = mappingTypePicker.find(TestPopover).find("li");
             expect(pickerOptions.length).toBe(1);
         })
@@ -248,12 +247,12 @@ describe("FieldApp", () => {
             const mappingTypePicker = section.find(Select);
             expect(mappingTypePicker.text()).toBe('Use original value')
 
-            mappingTypePicker.simulate('click');
+            click(mappingTypePicker);
             const pickerOptions = mappingTypePicker.find(TestPopover).find("li");
             expect(pickerOptions.length).toBe(2);
 
             const useFKButton = pickerOptions.at(1).children().first()
-            useFKButton.simulate('click');
+            click(useFKButton);
             store.waitForActions([UPDATE_FIELD_DIMENSION, FETCH_TABLE_METADATA])
             store.resetDispatchedActions();
             // TODO: Figure out a way to avoid using delay – the use of delays may lead to occasional CI failures
@@ -262,14 +261,14 @@ describe("FieldApp", () => {
             const fkFieldSelect = section.find(SelectButton);
 
             expect(fkFieldSelect.text()).toBe("Name");
-            fkFieldSelect.simulate('click');
+            click(fkFieldSelect);
 
             const sourceField = fkFieldSelect.parent().find(TestPopover)
                 .find("li")
                 .filterWhere(li => /Source/.test(li.text()))
                 .first().children().first();
 
-            sourceField.simulate('click')
+            click(sourceField)
             store.waitForActions([FETCH_TABLE_METADATA])
             // TODO: Figure out a way to avoid using delay – the use of delays may lead to occasional CI failures
             await delay(500);
@@ -283,7 +282,7 @@ describe("FieldApp", () => {
             expect(mappingTypePicker.text()).toBe('Use foreign key')
 
             const fkFieldSelect = section.find(SelectButton);
-            fkFieldSelect.simulate('click');
+            click(fkFieldSelect);
 
             const popover = fkFieldSelect.parent().find(TestPopover);
             expect(popover.length).toBe(1);
@@ -298,10 +297,10 @@ describe("FieldApp", () => {
             const mappingTypePicker = section.find(Select);
             expect(mappingTypePicker.text()).toBe('Use foreign key')
 
-            mappingTypePicker.simulate('click');
+            click(mappingTypePicker);
             const pickerOptions = mappingTypePicker.find(TestPopover).find("li");
             const useOriginalValue = pickerOptions.first().children().first()
-            useOriginalValue.simulate('click');
+            click(useOriginalValue);
 
             store.waitForActions([DELETE_FIELD_DIMENSION, FETCH_TABLE_METADATA]);
         })
@@ -312,7 +311,7 @@ describe("FieldApp", () => {
             const mappingTypePicker = section.find(Select);
 
             expect(mappingTypePicker.text()).toBe('Use original value')
-            mappingTypePicker.simulate('click');
+            click(mappingTypePicker);
             const pickerOptions = mappingTypePicker.find(TestPopover).find("li");
             expect(pickerOptions.length).toBe(1);
         });
@@ -324,12 +323,12 @@ describe("FieldApp", () => {
             const mappingTypePicker = section.find(Select);
 
             expect(mappingTypePicker.text()).toBe('Use original value')
-            mappingTypePicker.simulate('click');
+            click(mappingTypePicker);
             const pickerOptions = mappingTypePicker.find(TestPopover).find("li");
             expect(pickerOptions.length).toBe(2);
 
             const customMappingButton = pickerOptions.at(1).children().first()
-            customMappingButton.simulate('click');
+            click(customMappingButton);
 
             store.waitForActions([UPDATE_FIELD_DIMENSION, FETCH_TABLE_METADATA])
             // TODO: Figure out a way to avoid using delay – using delays may lead to occasional CI failures
diff --git a/frontend/test/admin/datamodel/datamodel.integ.spec.js b/frontend/test/admin/datamodel/datamodel.integ.spec.js
index e65a43726289bdd3b6bf1a293d6b8b7717036612..213685b78a04ba92cc49293fd5583566d1081d34 100644
--- a/frontend/test/admin/datamodel/datamodel.integ.spec.js
+++ b/frontend/test/admin/datamodel/datamodel.integ.spec.js
@@ -54,17 +54,17 @@ describe("admin/datamodel", () => {
             store.resetDispatchedActions()
 
             // Toggle its visibility to "Hidden"
-            app.find("#VisibilityTypes > span").at(1).simulate("click");
+            click(app.find("#VisibilityTypes > span").at(1))
             await store.waitForActions([UPDATE_TABLE]);
             store.resetDispatchedActions()
 
             // Toggle "Why hide" to "Irrelevant/Cruft"
-            app.find("#VisibilitySubTypes > span").at(2).simulate("click")
+            click(app.find("#VisibilitySubTypes > span").at(2))
             await store.waitForActions([UPDATE_TABLE]);
             store.resetDispatchedActions()
 
             // Unhide
-            app.find("#VisibilityTypes > span").at(0).simulate("click");
+            click(app.find("#VisibilityTypes > span").at(0))
 
             // Open "People" table section
             click(adminListItems.at(1));
@@ -129,7 +129,7 @@ describe("admin/datamodel", () => {
 
             const addFilterButton = filterPopover.find(".Button.disabled");
 
-            filterPopover.find('textarea.border-purple').simulate('change', { target: { value: "gmail" }})
+            setInputValue(filterPopover.find('textarea.border-purple'), "gmail");
             await clickButton(addFilterButton);
 
             await store.waitForActions([UPDATE_PREVIEW_SUMMARY]);
@@ -139,7 +139,7 @@ describe("admin/datamodel", () => {
             setInputValue(app.find("textarea[name='description']"), "change")
 
             // Save the segment
-            app.find('button[children="Save changes"]').simulate("click");
+            click(app.find('button[children="Save changes"]'))
 
             await store.waitForActions([CREATE_SEGMENT, INITIALIZE_METADATA]);
             store.resetDispatchedActions();
@@ -165,13 +165,13 @@ describe("admin/datamodel", () => {
             await store.waitForActions([FETCH_TABLE_METADATA, UPDATE_PREVIEW_SUMMARY]);
 
             click(app.find("#Query-section-aggregation"));
-            app.find("#AggregationPopover").find('h4[children="Count of rows"]').simulate("click");
+            click(app.find("#AggregationPopover").find('h4[children="Count of rows"]'))
 
-            app.find("input[name='name']").simulate('change', { target: { value: 'User count' }});
-            app.find("textarea[name='description']").simulate("change", { target: { value: 'Total number of users'}});
+            setInputValue(app.find("input[name='name']"), 'User count');
+            setInputValue(app.find("textarea[name='description']"), 'Total number of users');
 
             // Save the metric
-            app.find('button[children="Save changes"]').simulate("click");
+            click(app.find('button[children="Save changes"]'))
 
             await store.waitForActions([CREATE_METRIC, INITIALIZE_METADATA]);
             expect(store.getPath()).toBe("/admin/datamodel/database/1/table/2")
diff --git a/frontend/test/admin/settings/settings.integ.spec.js b/frontend/test/admin/settings/settings.integ.spec.js
index ac12a8979adb385ed92b8a88a7ed784d7593910a..7b7d8d1d88a5827dc31c3e0cb2ddd0eb0d45d6f3 100644
--- a/frontend/test/admin/settings/settings.integ.spec.js
+++ b/frontend/test/admin/settings/settings.integ.spec.js
@@ -7,6 +7,7 @@ import { mount } from "enzyme";
 import SettingInput from "metabase/admin/settings/components/widgets/SettingInput";
 import { INITIALIZE_SETTINGS, UPDATE_SETTING } from "metabase/admin/settings/settings";
 import { LOAD_CURRENT_USER } from "metabase/redux/user";
+import { setInputValue } from "__support__/enzyme_utils";
 
 describe("admin/settings", () => {
     beforeAll(async () =>
@@ -31,7 +32,7 @@ describe("admin/settings", () => {
             expect(input.prop("value")).not.toBe(siteName)
 
             // clear the site name input, send the keys corresponding to the site name, then blur to trigger the update
-            input.simulate('change', { target: { value: siteName } })
+            setInputValue(input, siteName)
             input.simulate('blur')
 
             await store.waitForActions([UPDATE_SETTING])
diff --git a/frontend/test/components/PasswordReveal.unit.spec.js b/frontend/test/components/PasswordReveal.unit.spec.js
index 41a1313d99a24a416fb17ba4798f117d0472f3cc..d5ad07180abda4da39dcdd39ff523449534c31d4 100644
--- a/frontend/test/components/PasswordReveal.unit.spec.js
+++ b/frontend/test/components/PasswordReveal.unit.spec.js
@@ -1,3 +1,5 @@
+import { click } from "__support__/enzyme_utils";
+
 import React from 'react'
 import PasswordReveal from '../../src/metabase/components/PasswordReveal'
 import CopyButton from 'metabase/components/CopyButton'
@@ -13,7 +15,7 @@ describe('password reveal', () => {
 
     it('should toggle the visibility state when hide / show are clicked', () => {
         expect(wrapper.state().visible).toEqual(false)
-        wrapper.find('a').simulate('click')
+        click(wrapper.find('a'))
         expect(wrapper.state().visible).toEqual(true)
     })
 
diff --git a/frontend/test/components/StepIndicators.unit.spec.js b/frontend/test/components/StepIndicators.unit.spec.js
index 325429d5d00044d7b4cdfc2aa5a1dfe2301c5c04..b2f6dd71665bc6f2432b3a88ba8ef88acad1fef5 100644
--- a/frontend/test/components/StepIndicators.unit.spec.js
+++ b/frontend/test/components/StepIndicators.unit.spec.js
@@ -1,3 +1,5 @@
+import { click } from "__support__/enzyme_utils";
+
 import React from 'react'
 import { shallow } from 'enzyme'
 import sinon from 'sinon'
@@ -29,7 +31,7 @@ describe('Step indicators', () => {
             )
 
             const targetIndicator = wrapper.find('li').first()
-            targetIndicator.simulate('click')
+            click(targetIndicator);
             expect(goToStep.calledWith(1)).toEqual(true)
         })
     })
diff --git a/frontend/test/dashboard/dashboard.integ.spec.js b/frontend/test/dashboard/dashboard.integ.spec.js
index cad4d19095e83bc478eef3b2e133dab8b9dd8721..186582917e07455089dbd6deaebd460c8847100e 100644
--- a/frontend/test/dashboard/dashboard.integ.spec.js
+++ b/frontend/test/dashboard/dashboard.integ.spec.js
@@ -141,14 +141,16 @@ describe("Dashboard", () => {
             await store.waitForActions([SET_EDITING_DASHBOARD]);
             click(app.find(".Icon.Icon-funneladd"));
             // Choose Time filter type
-            app.find(ParameterOptionsSection)
-                .filterWhere((section) => section.text().match(/Time/))
-                .simulate("click");
+            click(
+                app.find(ParameterOptionsSection)
+                    .filterWhere((section) => section.text().match(/Time/))
+            );
 
             // Choose Relative date filter
-            app.find(ParameterOptionItem)
-                .filterWhere((item) => item.text().match(/Relative Date/))
-                .simulate("click");
+            click(
+                app.find(ParameterOptionItem)
+                    .filterWhere((item) => item.text().match(/Relative Date/))
+            )
 
             await store.waitForActions(ADD_PARAMETER)
 
diff --git a/frontend/test/home/NewUserOnboardingModal.unit.spec.js b/frontend/test/home/NewUserOnboardingModal.unit.spec.js
index 7f88f4f3b02123b35b98d7323a346dac38f1cb1b..5fc7b6868f33da9f907aa24a45183fff996f2d68 100644
--- a/frontend/test/home/NewUserOnboardingModal.unit.spec.js
+++ b/frontend/test/home/NewUserOnboardingModal.unit.spec.js
@@ -1,3 +1,5 @@
+import { click } from "__support__/enzyme_utils";
+
 import React from 'react'
 import { shallow } from 'enzyme'
 import sinon from 'sinon'
@@ -12,7 +14,7 @@ describe('new user onboarding modal', () => {
             const nextButton = wrapper.find('a')
 
             expect(wrapper.state().step).toEqual(1)
-            nextButton.simulate('click')
+            click(nextButton)
             expect(wrapper.state().step).toEqual(2)
         })
 
@@ -26,7 +28,7 @@ describe('new user onboarding modal', () => {
 
             const nextButton = wrapper.find('a')
             expect(nextButton.text()).toEqual('Let\'s go')
-            nextButton.simulate('click')
+            click(nextButton);
             expect(onClose.called).toEqual(true)
         })
     })
diff --git a/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js b/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js
index cdc7121830c700770bcd474828fdd0cd39b46c25..53862b48e502563977a7af0cd07f1cf006f0eb55 100644
--- a/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js
+++ b/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js
@@ -5,6 +5,7 @@ import {
     ORDERS_TABLE_ID,
     metadata
 } from "__support__/sample_dataset_fixture";
+import { click } from "__support__/enzyme_utils"
 import Question from "metabase-lib/lib/Question";
 import SummarizeBySegmentMetricAction from "metabase/qb/components/actions/SummarizeBySegmentMetricAction";
 import { mount } from "enzyme";
@@ -72,12 +73,9 @@ describe("SummarizeBySegmentMetricAction", () => {
                 });
 
                 const component = mount(popover);
-                component.find('.List-item-title[children="Sum of ..."]')
-                    .simulate("click");
+                click(component.find('.List-item-title[children="Sum of ..."]'));
 
-                component
-                    .find('.List-item-title[children="Subtotal"]')
-                    .simulate("click");
+                click(component.find('.List-item-title[children="Subtotal"]'));
             });
         });
     });
diff --git a/frontend/test/parameters/parameters.integ.spec.js b/frontend/test/parameters/parameters.integ.spec.js
index 1d3a154fe4722ec731cf43c33de28788aac3cae6..b57e4d2b112de859de85c946b5aeccbb9abeb8c3 100644
--- a/frontend/test/parameters/parameters.integ.spec.js
+++ b/frontend/test/parameters/parameters.integ.spec.js
@@ -102,7 +102,7 @@ describe("parameters", () => {
 
             await store.waitForActions([LOAD_CURRENT_USER, INITIALIZE_SETTINGS])
 
-            app.find(EmbeddingLegalese).find('button[children="Enable"]').simulate('click');
+            click(app.find(EmbeddingLegalese).find('button[children="Enable"]'));
             await store.waitForActions([UPDATE_SETTING])
 
             expect(app.find(EmbeddingLegalese).length).toBe(0);
@@ -165,7 +165,7 @@ describe("parameters", () => {
             expect(app.find(Scalar).text()).toBe(COUNT_DOOHICKEY);
 
             // save the question, required for public link/embedding
-            app.find(".Header-buttonSection a").first().find("a").simulate("click");
+            click(app.find(".Header-buttonSection a").first().find("a"))
             await store.waitForActions([LOAD_COLLECTIONS]);
 
             setInputValue(app.find(SaveQuestionModal).find("input[name='name']"), "sql parametrized");
@@ -173,7 +173,7 @@ describe("parameters", () => {
             clickButton(app.find(SaveQuestionModal).find("button").last());
             await store.waitForActions([NOTIFY_CARD_CREATED]);
 
-            app.find('#QuestionSavedModal .Button[children="Not now"]').simulate("click");
+            click(app.find('#QuestionSavedModal .Button[children="Not now"]'))
             // wait for modal to close :'(
             await delay(200);
 
@@ -186,7 +186,7 @@ describe("parameters", () => {
             // make the parameter editable
             click(app.find(".AdminSelect-content[children='Disabled']"));
 
-            app.find(".TestPopoverBody .Icon-pencil").simulate("click");
+            click(app.find(".TestPopoverBody .Icon-pencil"))
 
             await delay(200);
 
diff --git a/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js b/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js
index 5b7c344fd7f6874a22b8c79c9cecf1c32db8a0c0..d721eafbcfe2d36a06520a09d6aec06b6441d4ab 100644
--- a/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js
+++ b/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js
@@ -51,7 +51,7 @@ describe("FieldPane", () => {
         // then we can replace this with `store.waitForActions([FETCH_TABLE_FOREIGN_KEYS])` or similar
         await delay(3000)
 
-        dataReference.find(`a[children="Created At"]`).first().simulate("click")
+        click(dataReference.find(`a[children="Created At"]`).first())
 
         await store.waitForActions([FETCH_TABLE_METADATA]);
     });
@@ -65,7 +65,7 @@ describe("FieldPane", () => {
         // eslint-disable-line react/no-irregular-whitespace
         expect(getUseForButton().text()).toMatch(/Group by/);
 
-        getUseForButton().simulate('click');
+        click(getUseForButton());
         await store.waitForActions([QUERY_COMPLETED]);
         store.resetDispatchedActions()