1.0.2 • Published 6 years ago

test-your-gulp-plugin v1.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

Easily test your Gulp plugin.

In gulp's testing docs it explains how to test in buffer & stream mode, involves making new Buffers, Streams, etc. -- all pretty low level tests.

test-your-gulp-plugin gives you:

  • the standard tests out of the box (i.e. it('ignores null files', () => { ... })) so you don't have to write them at all
  • you provide expected inputs and outputs as strings, and they are validated in buffer mode and stream mode
  • no messing about with files, streams, and buffers

Example: testing imaginary gulp plugin gulp-swap-case which mixes up casing

// test/index.js
const testPlugin = require('test-your-gulp-plugin');
const gulpSwapCase = require('..');

testPlugin('gulp-swap-case', (it, itIgnoresNullFiles) => {
  itIgnoresNullFiles(gulpSwapCase());

  it('switches mixed case', {
    plugin: gulpSwapCase(),
    input: 'some lower SOME UPPER',
    output: 'SOME LOWER some upper'
  });

  it('also switches case of file name', {
    plugin: gulpSwapCase(),
    input: {
      contents: 'some lower SOME UPPER',
      path: '/foo/bAr.txt'
    },
    output: {
      contents: 'SOME LOWER some upper',
      path: '/foo/BaR.txt'
    }
  });

  it('forces all to uppercase if allUpper: true is given in options', {
    plugin: gulpSwapCase({ allUpper: true }),
    input: 'some lower SOME UPPER',
    output: 'SOME LOWER SOME UPPER'
  });

  it('does something that I haven\'t written a test for yet', {
    pending: 'waiting on X'
    // or, `pending: true` will work too
  });

  it('errors in a given situation', {
    plugin: gulpSwapCase(),
    input: 'whatever',
    error: 'Can\'t change case when text is exactly `whatever`'
  });
});

For more examples, see gulp-json-handlebars which uses test-your-gulp-plugin.

Run the tests: use Jasmine

from command line:

npm install --save-dev jasmine
npx jasmine test/index.js

Or, instead of using [npx](https://www.npmjs.com/package/npx), add "test": "jasmine test/index.js" to yourpackage.json`

Contribution

Yes please! I will liberally accept PRs.

Future work

  • add stream mode tests
  • add null file tests (maybe? are they needed?)
  • give examples of tests for side effects -- things other than input/output

Implementation notes

See the gulp docs for testing plugins for details. That page links to a few plugins with "high-quality Testing" -- they're good examples to work off of