karma-ox-ui

Karma adapter for Open-Xchange App Suite UI module testing

Usage no npm install needed!

<script type="module">
  import karmaOxUi from 'https://cdn.skypack.dev/karma-ox-ui';
</script>

README

karma-ox-ui

Karma adaptor for OX App Suite UI plugin tests.

Setup

Make sure, karma executable is installed:

npm install -g karma-cli

Install a few more testing libraries locally:

npm install --save-dev karma-mocha karma-chai karma-sinon karma-ox-ui karma-phantomjs-launcher

After that, in your plugin directory generate a new karma.conf.js:

jb@wiggum ~/code/appsuite/ox_pgp_mail (git)-[karma] % karma init

Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> mocha                                                                                                                                                                                                                                     

Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no                                                                                                                                                                                                                                        

Do you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
>                                                                                                                                                                                                                                           

What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>                                                                                                                                                                                                                                           

jb@wiggum ~/code/appsuite/ox_pgp_mail (git)-[ding] % karma init

Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> mocha                                                                                                                                                                                                                                     

Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no                                                                                                                                                                                                                                        

Do you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
> PhantomJS                                                                                                                                                                                                                                 
>                                                                                                                                                                                                                                           

What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>                                                                                                                                                                                                                                           

Should any of the files included by the previous patterns be excluded ?
You can use glob patterns, eg. "**/*.swp".
Enter empty string to move to the next question.
>                                                                                                                                                                                                                                           

Do you want Karma to watch all the files and run the tests on change ?
Press tab to list possible options.
> no                                                                                                                                                                                                                                        


Config file generated at "/home/jb/code/appsuite/ox_pgp_mail/karma.conf.js".

Edit the generated file and adjust the following configuration variables:

basePath: 'build/',
frameworks: ['ox-ui', 'sinon', 'mocha', 'chai'],
files: [
    'spec/test-main.js',
    {pattern: 'apps/**/*.js', included: false},
    {pattern: 'spec/**/*_spec.js', included: false}
]

Generate a main loader script to start the test after App Suite Core UI has been booted. The file should be put in spec/test-main.js:

var allTestFiles = [];
var TEST_REGEXP = /_spec\.js$/i;

var pathToModule = function(path) {
  return path;
//   return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

Object.keys(window.__karma__.files).forEach(function(file) {
  if (TEST_REGEXP.test(file)) {
    // Normalize paths to RequireJS module names.
    allTestFiles.push(pathToModule(file));
  }
});

require(['io.ox/core/extPatterns/stage'], function (Stage) {

    'use strict';

        ox.testUtils.stubAppsuiteBody();

        new Stage('io.ox/core/stages', {
            id: 'run_tests',
            index: 99999,
            run: function (baton) {
                requirejs.config({
                    // Karma serves files from '/base/apps'
                    baseUrl: '/base/apps',

                    // ask Require.js to load these files (all our tests)
                    deps: allTestFiles,

                    // start test run, once Require.js is done
                    callback: window.__karma__.start
                });
            }
        });
});

Running the tests

There are multiple targets provided in shared-grunt-config. The recommended way is to run grunt dev. This will start a connect server, the karma test server and a watcher for changes. You can trigger a testrun manually by running grunt testrun in another terminal. This will be done automatically by the grunt watch task, after any source file of your project has been changed.