Skip to content

valotas/karma-parcel

Repository files navigation

Karma Parcel

Use parcel v2 to preprocess karma tests

Notice: v0.7 or newer of this plugin supports parcel@2 and karma@6. If for whatever reason you need to make use of parcel-bundler@1 (or parcel@1), please use karma-parcel@0.6

Install

To get all the needed packages:

npm i karma parcel karma-parcel -D

Configure:

Add parcel to the frameworks to be used and to the files that should be preprocessed with it:

module.exports = function (config) {
  config.set({
    frameworks: ["mocha", "parcel"],

    // add patterns with all your tests even if they should not
    // be handled by parcel
    files: [
      "tests/**/*.js",
      {
        // parcel tests should not be watched. Parcel will do the
        // watching instead
        pattern: "parcel/**/*.js",
        watched: false,
        included: false,
      },
    ],

    // let karma know which of the test files should be bundled
    // with parcel
    preprocessors: {
      "parcel/*": ["parcel"],
    },
  });
};

parcelConfig

some more parcel specific configuration can be passed to the underlying parcel instance via the parcelConfig attribute of your karma configuration:

module.exports = function (config) {
  config.set({
    // lot of karma configuration
    parcelConfig: {
      cacheDir: "/path/to/cache", // default: "./.cache"
      detailedReport: true, // default: false,
      logLevel: "verbose",
    },
  });
};

karmaParcelWorkspace

make use of this in order to define a workspace other than current directory:

module.exports = function (config) {
  config.set({
    // ... lot of karma configuration
    // use /tmp/foo/bar as the workspace
    karmaParcelWorkspace: path.join(os.tmpdir(), "foo", "bar"),
    parcelConfig: { /* the parcel config*/ },
  });
};

Under the hood

Parcel will create one bundle with all the files that are preprocessed with the parcel preprocessor. The preprocessor will emit an empty file instead of the actual content. The plugin will register a bundle file to karma's fileList with serve: false in order not to be handled by karma's middleware. To serve the bundled file, parcel's own middleware is registered and used

Related

This plugin is heavily inspired by karma-browserify and karma-webpack.