Coder Social home page Coder Social logo

karma-mocha-webworker's Introduction

karma-mocha-webworker

Travis CI Build Status

Karma plugin which runs your mocha tests in a WebWorker.

Using this plugin you can test your javascript code for WebWorker compatibility.

Usage

Install the module and save it as a devDependency:

npm install karma-mocha-webworker --save-dev

Instructions on how to install karma can be found here.

You will then have to configure your karma config:

module.exports = config => {
  config.set({
    // 1. Load this karma plugin
    frameworks : ['mocha-webworker'],

    // 2. Configure the files you would like karma to serve.
    //    Make sure you set `included` to `false`. Otherwise karma
    //    will execute your scripts outside of the WebWorker.
    files      : [
      {pattern: 'test/my-test-case.js', included: false},
      {pattern: 'test/more-test-cases/*.js', included: false}
    ],

    client     : {
      // 3. Configure the URLs that this plugin should execute
      //    within a WebWorker for you. These patterns are
      //    matched (using minimatch) on the `config.files`
      //    array configured in step 2.
      //    If you omit `pattern`, all URLs will be executed.
      mochaWebWorker: {
        pattern : [
          'test/my-test-case.js',
          'test/more-test-cases/*.js'
        ],
        // You can also use a SharedWorker for test execution
        // instead of the default 'Worker'
        worker: 'SharedWorker',
        // You can also pass some options to mocha:
        mocha   : {
          ui: 'tdd'
        },
        // You can also evaluate javascript code within the Worker at various stages:
        evaluate: {
          beforeMochaImport: 'self.console.log("Before the mocha script is imported")',
          beforeMochaSetup : 'self.console.log("Before mocha is setup (mocha.setup())")',
          beforeScripts    : 'self.console.log("Before your scripts are imported")',
          beforeRun        : 'self.console.log("Before your tests are run (mocha.run())")',
          afterRun         : 'self.console.log("After your tests have been run")'
        }
      }
    }
  });
};

Grep

To run only some test cases matching a given pattern, you can use:

karma start &
karma run -- --grep foo

Google Chrome Caveat

Google Chrome currently (tested up to v55) does not pass on stack information when an error occurs within a script loaded into a Web Worker (e.g. importScripts(['foo.js'])). So if your script contains a syntax error or a runtime error, the stack will point at a line within karma-mocha-webworker. You can workaround this issue by using Firefox.

karma-mocha-webworker's People

Contributors

dnoliver avatar jonathandasilva avatar joris-van-der-wel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

karma-mocha-webworker's Issues

Reuse for testing in SharedWorker

Hello @Joris-van-der-Wel, thank you for this plugin!

So I am currently working in a project that use Shared Workers, and I am the one that has to came up with unit testing framework for that code. I was using Karma + Mocha + Requirejs for browser code, and I started using Karma + Karma-Mocha-WebWorkers for the Shared Worker code.

(NOTE: I spent a few ours trying to make requirejs work with this plugin, maybe I could post the HOW TO here)

My question is, do you think it is a valid idea to allow somebody to configure different types of Workers to be used to run the test? So I can use Web Worker, or Service Worker, or Shared Worker

Maybe I could do a PR for this

Run code on main thread before tests

Is it possible to run before-style code on the main thread before your tests are executed on the worker with this plugin?

I can see beforeMochaImport, beforeMochaSetup etc hooks in the config example but it says they all run on the worker.

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.