diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.test.ts b/src/Umbraco.Web.UI.Client/src/installer/installer.test.ts
new file mode 100644
index 0000000000..56b019d8b6
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/installer.test.ts
@@ -0,0 +1,103 @@
+import { html, fixture, expect } from '@open-wc/testing';
+import { UmbInstallerConsent } from './installer-consent.element';
+import { UmbInstallerDatabase } from './installer-database.element';
+import { UmbInstallerInstalling } from './installer-installing.element';
+import { UmbInstallerLayout } from './installer-layout.element';
+import { UmbInstallerUser } from './installer-user.element';
+import { UmbInstaller } from './installer.element';
+
+describe('UmbInstaller', () => {
+ let element: UmbInstaller;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstaller);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});
+
+describe('UmbInstallerLayout', () => {
+ let element: UmbInstallerLayout;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstallerLayout);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});
+
+describe('UmbInstallerUser', () => {
+ let element: UmbInstallerUser;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstallerUser);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});
+
+describe('UmbInstallerConsent', () => {
+ let element: UmbInstallerConsent;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstallerConsent);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});
+
+describe('UmbInstallerDatabase', () => {
+ let element: UmbInstallerDatabase;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstallerDatabase);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});
+
+describe('UmbInstallerInstalling', () => {
+ let element: UmbInstallerInstalling;
+
+ beforeEach(async () => {
+ element = await fixture(html``);
+ });
+
+ it('is defined with its own instance', async () => {
+ expect(element).to.be.instanceOf(UmbInstallerInstalling);
+ });
+
+ it('passes the a11y audit', async () => {
+ expect(element).shadowDom.to.be.accessible();
+ });
+});