diff --git a/packages/qr-code-scanner/karma.conf.js b/packages/qr-code-scanner/karma.conf.js
index 6a646f5ec9ea5a6c50dd25dc6038dd94fff1bc43..b6731e5705b9b7419fa3831747c0a3feb0bfd074 100644
--- a/packages/qr-code-scanner/karma.conf.js
+++ b/packages/qr-code-scanner/karma.conf.js
@@ -4,7 +4,12 @@ process.env.CHROME_BIN = require('puppeteer').executablePath();
 module.exports = function(config) {
   config.set({
     basePath: 'dist',
-    frameworks: ['mocha', 'chai'],
+    frameworks: ['mocha'],
+    client: {
+      mocha: {
+        ui: 'tdd',
+      },
+    },
     files: [
       {pattern: './*.js', included: true, watched: true, served: true, type: 'module'},
       {pattern: './**/*', included: false, watched: true, served: true},
diff --git a/packages/qr-code-scanner/rollup.config.js b/packages/qr-code-scanner/rollup.config.js
index ea73141b91160c4a47dede33e45a9d83619b5096..83266356c8b804099630e5bd4e88f6b0f0855126 100644
--- a/packages/qr-code-scanner/rollup.config.js
+++ b/packages/qr-code-scanner/rollup.config.js
@@ -44,6 +44,13 @@ export default (async () => {
             format: 'esm',
             sourcemap: true
         },
+        onwarn: function (warning, warn) {
+            // ignore chai warnings
+            if (warning.code === 'CIRCULAR_DEPENDENCY') {
+                return;
+            }
+            warn(warning);
+        },
         plugins: [
             del({
                 targets: 'dist/*'
diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index 0ef514730388831c39d05972da7a662b41783ad3..f48bf4bec5c8dd84b8fd4ec2255b9fb17affda6d 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -1,10 +1,9 @@
 import {i18n} from './i18n';
-import {css, html, LitElement} from 'lit-element';
+import {css, html} from 'lit-element';
 import DBPLitElement from 'dbp-common/dbp-lit-element';
 import * as commonStyles from 'dbp-common/styles';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
-import * as commonUtils from 'dbp-common/utils';
-import {Button, Icon, MiniSpinner} from 'dbp-common';
+import {Icon, MiniSpinner} from 'dbp-common';
 import {classMap} from 'lit-html/directives/class-map.js';
 import jsQR from "jsqr";
 
@@ -13,7 +12,7 @@ import jsQR from "jsqr";
  * Returns the ID for the most important device
  *
  * @param {Map} devices
- * @return string|null
+ * @returns {string|null} the ID
  */
 function getPrimaryDevice(devices) {
     if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
@@ -31,7 +30,7 @@ function getPrimaryDevice(devices) {
  *
  * Moreimportant devices first.
  *
- * @return Map<string,string>
+ * @returns {Map<string,string>} the map of devices
  */
 async function getVideoDevices() {
     let devices_map = new Map();
@@ -41,7 +40,7 @@ async function getVideoDevices() {
 
         let devices;
         try {
-            devices = await navigator.mediaDevices.enumerateDevices()
+            devices = await navigator.mediaDevices.enumerateDevices();
         } catch (err) {
             console.log(err.name + ": " + err.message);
             return devices_map;
@@ -147,7 +146,7 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
         if (changedProperties.get('stopScan') && !this.stopScan) {
             this.qrCodeScannerInit();
         }
-    };
+    }
 
     /**
      * Get a loading message
@@ -264,7 +263,7 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
                 let maskStartX = canvasElement.width;
                 let maskStartY = canvasElement.height;
 
-                let imageData = canvas.getImageData(0 , 0, canvasElement.width, canvasElement.height)
+                let imageData = canvas.getImageData(0 , 0, canvasElement.width, canvasElement.height);
 
                 if (that.clipMask) {
                     //draw mask
diff --git a/packages/qr-code-scanner/test/unit.js b/packages/qr-code-scanner/test/unit.js
index 78bd50cb1315f6a53d8be31f33f77e47473fbe9b..0537c74d546512a6d81cdcf1c24e82054407ebd2 100644
--- a/packages/qr-code-scanner/test/unit.js
+++ b/packages/qr-code-scanner/test/unit.js
@@ -1,19 +1,21 @@
+import {assert} from 'chai';
+
 import '../src/dbp-qr-code-scanner';
 
-describe('dbp-qr-code-scanner basics', () => {
+suite('dbp-qr-code-scanner basics', () => {
   let node;
 
-  beforeEach(async () => {
+  suiteSetup(async () => {
     node = document.createElement('dbp-qr-code-scanner');
     document.body.appendChild(node);
     await node.updateComplete;
   });
 
-  afterEach(() => {
+  suiteTeardown(() => {
     node.remove();
   });
 
-  it('should render', () => {
-      expect(node).to.have.property('shadowRoot');
+  test('should render', () => {
+    assert.isNotNull(node.shadowRoot);
   });
 });