SkippyJS is an continuous test runner for JavaScript using PhantomJS. It features:
Install skippyjs:
npm install skippyjs --saveDev
Create a skippy config file, see skippyConfig.js for an example.
Run skippyJS:
./node_modules/.bin/skippyjs mySkippyConfig.js
The following options are supported:
-h, --help output usage information
-V, --version output the version number
-r, --run-once only perform one test run, do not watch file changes
-s, --store-coverage store coverage JSON after determining related files
--verbose verbose output
The skippy config file can be written with ES6 (ES2015) or ES5 syntax, ES6 is preferred.
// Select the test framework your project uses.
// Only jasmine@1.3.1 and jasmine@2.3.4 is supported right now.
export let testFramework = 'jasmine@2.3.4';
// Specify which files should be instrumented to determine the relation between src and test.
// Files that normally should not be instrumented are libraries and configuration.
// You can use the glob-all syntax.
export let instrumentFiles = [
'src/**/*.js',
'!src/**/*.spec.js'
];
// Specify all the src files that are needed to boot your application. Note that order is
// important. You can use the spread operator to combine the instrumented files in this array.
export let srcFiles = [
...instrumentFiles
];
// Specify the files containing tests.
export let testFiles = [
'src/**/*.spec.js'
];
// Specify static file contents to be served by Skippy's http server. Uses
// https://github.com/isaacs/st as implementation. The 'passthrough' flag is ignored.
export let staticFiles = [
{ path: 'some/path/to/img', url: '/assets/images' }
];
// Override the number of Phantom processes used to run tests. Default is 8.
export let maxProcesses = 4;
// Optionally define preprocessors for your src files.
// See 'Preprocessor setup' for more details.
export let preprocessors = {};
// Override the temp path for storing processed files and coverage. Defaults to
// <app root>/node_modules/skippyjs/.tmp
export let tmpPath = '.tmp/';
// Override the port for the HTTP server that hosts files for Phantom. Defaults to 3000.
export let httpServerPort = 3001;
// Only perform one test run. Exists with status code 1 if any test failed. Can also be
// set with --run-once flag. Defaults to false.
export let runOnce = true;
// Store the JS coverage after related files have been determined. It causes a
// slight perf hit as retrieving it from Phantom is slow. Can also be set with
// --store-coverage flag. Default is false.
export let storeCoverage = true;
// Enable more verbose output. Turning it on may cause some degraded perf. Can also be
// set with --verbose flag. Default is false.
export let verbose = true;
Go to ./example
Run skippyJS:
../bin/skippyjs skippyConfig.js
To determine the relation between a src and test file, the following algorithm is used:
There are many cases where this relation between tests does not hold. But in practice it can be sufficient.
First install your favorite Karma preprocessor using npm, for instance:
npm install --save karma-coffee-preprocessor
Then, setup the preprocessor in your config:
// ... other exports
import ngHtml2jsPreprocessor from 'karma-ng-html2js-preprocessor';
import coffeePreprocessor from 'karma-coffee-preprocessor';
export let preprocessors = {
'**/*.html': ngHtml2jsPreprocessor, // shorthand, pick first preprocessor from imported object
'**/*.coffee': { // full syntax
name: 'coffee', // optional alternative preprocessor name from imported object
preprocessor: coffeePreprocessor,
config: {
// optional configuration normally specified in karma config
coffeePreprocessor: {
// example, see preprocessor docs for details
transformPath: (path) => { return path; }
}
}
}
};
Make sure to include the preprocessed files in your src files:
export srcFiles = [
'**/*.html',
'**/*.coffee',
// ... etc
];
MIT