Git Product home page Git Product logo

karma-browserify's Introduction

karma-browserify

CI

karma-browserify is a fast Browserify integration for Karma that handles large projects with ease.

Installation

Get the plug-in via npm.

You will also need to install browserify and watchify (for auto-watch only) with it.

npm install --save-dev karma-browserify browserify watchify

Usage

Add browserify as a framework to your Karma configuration file. For each file that should be processed and bundled by Karma, configure the browserify preprocessor. Optionally use the browserify config entry to configure how the bundle gets created.

module.exports = function(karma) {
  karma.set({

    frameworks: [ 'browserify', 'jasmine', 'or', 'any', 'other', 'framework' ],
    files: ['test/**/*.js'],
    preprocessors: {
      'test/**/*.js': [ 'browserify' ]
    },

    browserify: {
      debug: true,
      transform: [ 'brfs' ]
    }
  });
}

Look at the example directory for a simple browserify + jasmine project that uses this plug-in.

Browserify Config

Test bundles can be configured through the browserify Karma configuration property. Configuration options are passed directly to browserify.

For example to generate source maps for easier debugging, specify:

    browserify: {
      debug: true
    }

There are three properties that are not passed directly:

Transforms

If you use CoffeeScript, JSX or other tools that need to transform the source file before bundling, specify a browserify transform (Karma preprocessors are not supported).

    browserify: {
      transform: [ 'reactify', 'coffeeify', 'brfs' ]

      // don't forget to register the extensions
      extensions: ['.js', '.jsx', '.coffee']
    }

You can also specify options for the transformations:

    browserify: {
      transform: [ ['reactify', {'es6': true}], 'coffeeify', 'brfs' ]
    }

Plugins

The browserify plugin option supports the same syntax as transform.

    browserify: {
      plugin: [ 'stringify' ]
    }

Additional Bundle Configuration

You may perform additional configuration in a function passed as the configure option and that receives the browserify instance as an argument. A custom prebundle event is emitted on the bundle right before a bundling operation takes place. This is useful when setting up things like externals:

    browserify: {
      configure: function(bundle) {
        bundle.on('prebundle', function() {
          bundle.external('foobar');
        });
      }
    }

You'll also need to use the 'prebundle' event for full control over the order of transforms and plugins:

    browserify: {
      configure: function(bundle) {
        bundle.once('prebundle', function() {
          bundle.transform('babelify').plugin('proxyquireify/plugin');
        });
      }
    }

Note that transforms must only be added once.

Watchify Config

You can configure the underlying watchify instance via config.watchify. This is helpful if you need to fine tune the change detection used during autoWatch=true.

    watchify: {
      poll: true
    }

How it Works

This project is a preprocessor for Karma that combines test files and dependencies into a browserified bundle. It relies on watchify to generate the bundle and to keep it updated during autoWatch=true.

Before the initial test run we build one browserify bundle for all test cases and dependencies. Once any of the files change, it incrementally updates the bundle. Each file included in Karma is required from the file bundle via a stub. Thereby it ensures tests are only executed once per test run.

Detailed Configuration

The following code snippet shows a Karma configuration file with all browserify-related options.

module.exports = function(karma) {
  karma.set({

    // include browserify first in used frameworks
    frameworks: [ 'browserify', 'jasmine' ],

    // add all your files here,
    // including non-commonJS files you need to load before your test cases
    files: [
      'some-non-cjs-library.js',
      'test/**/*.js'
    ],

    // add preprocessor to the files that should be
    // processed via browserify
    preprocessors: {
      'test/**/*.js': [ 'browserify' ]
    },

    // see what is going on
    logLevel: 'LOG_DEBUG',

    // use autoWatch=true for quick and easy test re-execution once files change
    autoWatch: true,

    // add additional browserify configuration properties here
    // such as transform and/or debug=true to generate source maps
    browserify: {
      debug: true,
      transform: [ 'brfs' ],
      configure: function(bundle) {
        bundle.on('prebundle', function() {
          bundle.external('foobar');
        });
      }
    }
  });
};

Related

Credit goes to to the original karma-browserify and karma-browserifast. This library builds on the lessons learned in these projects and offers improved configurability, speed and/or the ability to handle large projects.

Maintainers

License

MIT

karma-browserify's People

Contributors

andrewswerlick-hmn avatar anthony-redfox avatar bendrucker avatar bengro avatar etpinard avatar hypercubed avatar joris-van-der-wel avatar jsdir avatar morganrallen avatar nikku avatar nylen avatar ossdev07 avatar petrbela avatar pmowrer avatar ricardomatias avatar sdtsui avatar smrq avatar steffenmllr avatar thaiat avatar xdissent avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.