npm package: @kp-mods/karma-nodewebkit-launcher
Description: A Karma plugin. Launcher for node-webkit.
Author: Vojta Jina
Latest version: 0.0.19

# karma-nodewebkit-launcher

Launcher for NW.js (former Node Webkit).

---

This is a small but experimental launcher, based on
the [Safari Launcher](https://github.com/karma-runner/karma-safari-launcher) by Vojta Jina and contributors, and not
affiliated with any official or semi-official Karma plugins.

---

## Installation

You can install `@kp-mods/karma-nodewebkit-launcher` using command:

```bash
npm install @kp-mods/karma-nodewebkit-launcher --save-dev
```

## Configuration

`karma.conf.js`:

```js
module.exports = function (config) {
    config.set({
        browsers: ['NodeWebkit']
    });
};
```

You can pass list of browsers as a CLI argument too:

```bash
karma start --browsers NodeWebkit
```

## Locally-installed Node modules

If you're using locally-installed Node modules via `require` in your code in the `node_modules` directory, you should be
able to just `require` them, and they should be found by the testing environment. If they are in another location, in
order for the testing environment to find them, you have 2 options.

You can explicitly set `NODE_PATH` in the environment to the directory containing the modules.

```bash
export NODE_PATH=/full/path/to/custom_node_modules
```

Alternatively, you can create a custom configuration in `karma.conf.js`:

```js
config.set({
    browsers: ['NodeWebkitWithCustomPath'],
    customLaunchers: {
        NodeWebkitWithCustomPath: {
            base: 'NodeWebkit',
            // Remember to include 'node_modules' if you have some modules there
            paths: ['relative/path/to/custom_node_modules', 'node_modules']
        }
    }
});
```

## Avoid download of NodeWebkit binary on every build

The launcher depends on [`npm-installer`](https://github.com/nwjs/npm-installer) to download the NodeWebkit binary for
your platform and architecture. The default behaviour of this is to download on every `npm install`, which can take time.
To avoid this you can download the file ahead of time, save it to a location accessibly by `http://` or `file://` URL,
and set the `nwjs_urlbase` option of [`npm-installer`](https://github.com/nwjs/npm-installer) to retrieve the binary
from this location.

You can do this on the command line

```bash
npm install --nwjs_urlbase=file:///home/bilbo/my/own/mirror
```

via a line in a `.npmrc` file

```bash
nwjs_urlbase=file:///home/bilbo/my/own/mirror
```

or by the environment variable `NWJS_URLBASE`

```bash
export NWJS_URLBASE=file:///home/bilbo/my/own/mirror
```

## Custom NW.js manifest

The default NW.js [`package.json`](https://github.com/nwjs/nw.js/wiki/Manifest-format) that is used in the launcher is

```json
{
  "name": "karma-runner",
  "main": "index.html",
  "node-remote": "<local>"
}
```

You can overwrite and add to these defaults by creating a custom configuration in `karma.conf.js`. For example, to run
your tests in kiosk mode

```js
config.set({
    browsers: ['NodeWebkitKiosk'],
    customLaunchers: {
        NodeWebkitKiosk: {
            base: 'NodeWebkit',
            options: {
                window: {
                    'kiosk': true
                }
            }
        }
    }
})
```

The `options` in the above example are merged with the defaults, so the resulting `package.json` used in NW.js is

```json
{
  "name": "karma-runner",
  "main": "index.html",
  "node-remote": "<local>",
  "window": {
    "kiosk": true
  }
}
```