diff --git a/app/src/__tests__/App.spec.js b/app/src/__tests__/App.spec.js
new file mode 100644
index 0000000..279788a
--- /dev/null
+++ b/app/src/__tests__/App.spec.js
@@ -0,0 +1,99 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { Provider } from 'react-redux';
+import { Route, MemoryRouter } from 'react-router-dom';
+import { act } from 'react-dom/test-utils';
+import { createIntl, createIntlCache, RawIntlProvider } from 'react-intl';
+import App from '../components/App';
+import ChooseRoom from '../components/ChooseRoom';
+import RoomContext from '../RoomContext';
+
+import configureStore from 'redux-mock-store';
+
+const mockStore = configureStore([]);
+
+let container;
+
+let store;
+
+let intl;
+
+const roomClient = {};
+
+beforeEach(() =>
+{
+ container = document.createElement('div');
+
+ store = mockStore({
+ me : {
+ displayNameInProgress : false,
+ id : 'jesttester',
+ loggedIn : false,
+ loginEnabled : true
+ },
+ room : {
+ },
+ settings : {
+ displayName : 'Jest Tester'
+ }
+ });
+
+ const cache = createIntlCache();
+
+ const locale = 'en';
+
+ intl = createIntl({
+ locale,
+ messages : {}
+ }, cache);
+
+ document.body.appendChild(container);
+});
+
+afterEach(() =>
+{
+ document.body.removeChild(container);
+ container = null;
+});
+
+describe('', () =>
+{
+ test('renders chooseroom', () =>
+ {
+ act(() =>
+ {
+ ReactDOM.render(
+
+
+
+
+
+
+
+
+ ,
+ container);
+ });
+ });
+});
+
+describe('', () =>
+{
+ test('renders joindialog', () =>
+ {
+ act(() =>
+ {
+ ReactDOM.render(
+
+
+
+
+
+
+
+
+ ,
+ container);
+ });
+ });
+});
\ No newline at end of file
diff --git a/app/src/__tests__/Room.spec.js b/app/src/__tests__/Room.spec.js
new file mode 100644
index 0000000..a866e06
--- /dev/null
+++ b/app/src/__tests__/Room.spec.js
@@ -0,0 +1,126 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { Provider } from 'react-redux';
+import { act } from 'react-dom/test-utils';
+import { createIntl, createIntlCache, RawIntlProvider } from 'react-intl';
+import Room from '../components/Room';
+import { SnackbarProvider } from 'notistack';
+import RoomContext from '../RoomContext';
+
+import configureStore from 'redux-mock-store';
+
+const mockStore = configureStore([]);
+
+let container;
+
+let store;
+
+let intl;
+
+const roomClient = {};
+
+beforeEach(() =>
+{
+ container = document.createElement('div');
+
+ store = mockStore({
+ chat : [],
+ consumers : {},
+ files : {},
+ lobbyPeers : {},
+ me : {
+ audioDevices : null,
+ audioInProgress : false,
+ canSendMic : false,
+ canSendWebcam : false,
+ canShareFiles : false,
+ canShareScreen : false,
+ displayNameInProgress : false,
+ id : 'jesttester',
+ loggedIn : false,
+ loginEnabled : true,
+ picture : null,
+ raiseHand : false,
+ raiseHandInProgress : false,
+ screenShareInProgress : false,
+ webcamDevices : null,
+ webcamInProgress : false
+ },
+ notifications : [],
+ peerVolumes : {},
+ peers : {},
+ producers : {},
+ room : {
+ accessCode : '',
+ activeSpeakerId : null,
+ fullScreenConsumer : null,
+ inLobby : true,
+ joinByAccessCode : true,
+ joined : false,
+ lockDialogOpen : false,
+ locked : false,
+ mode : 'democratic',
+ name : 'test',
+ selectedPeerId : null,
+ settingsOpen : false,
+ showSettings : false,
+ signInRequired : false,
+ spotlights : [],
+ state : 'connecting',
+ toolbarsVisible : true,
+ torrentSupport : false,
+ windowConsumer : null
+ },
+ settings : {
+ advancedMode : true,
+ displayName : 'Jest Tester',
+ resolution : 'ultra',
+ selectedAudioDevice : 'default',
+ selectedWebcam : 'soifjsiajosjfoi'
+ },
+ toolarea : {
+ currentToolTab : 'chat',
+ toolAreaOpen : false,
+ unreadFiles : 0,
+ unreadMessages : 0
+ }
+ });
+
+ const cache = createIntlCache();
+
+ const locale = 'en';
+
+ intl = createIntl({
+ locale,
+ messages : {}
+ }, cache);
+
+ document.body.appendChild(container);
+});
+
+afterEach(() =>
+{
+ document.body.removeChild(container);
+ container = null;
+});
+
+describe('', () =>
+{
+ test('renders correctly', () =>
+ {
+ act(() =>
+ {
+ ReactDOM.render(
+
+
+
+
+
+
+
+
+ ,
+ container);
+ });
+ });
+});
\ No newline at end of file
diff --git a/app/src/__tests__/RoomClient.spec.js b/app/src/__tests__/RoomClient.spec.js
new file mode 100644
index 0000000..086e6a5
--- /dev/null
+++ b/app/src/__tests__/RoomClient.spec.js
@@ -0,0 +1,9 @@
+import RoomClient from '../RoomClient';
+
+describe('new RoomClient() without paramaters throws Error', () =>
+{
+ test('Matches the snapshot', () =>
+ {
+ expect(() => new RoomClient()).toThrow(Error);
+ });
+});
\ No newline at end of file