regtester
v0.0.1
Published
A library for doing simple output-based regression tests.
Readme
regtester
A library for doing simple input/output based regression tests.
The library exports a single class, TestDataFiles, which handles creation of a temporary
output directory, comparison of the observed output to the expected output, and automatically
printing the diff if the files don't match.
To use:
Install:
npm install regtesterFirst, put your input files (if any) in a test-data directory,
within the directory that contains your test, e.g.:
something/something/lib/test
\_ regtest.coffee
\_ test-data
\_ myinputfileNext, write your test (assumes nodeunit, see below for other test frameworks):
var TestDataFiles = require('regtester').TestDataFiles;
exports.setUp = function(cb) {
this.testData = new TestDataFiles(__filename);
cb();
}
// import the function you want to test.
var processFile = require('./the-module-under-test').processFile;
exports.testRegtest = function(test) {
this.testData.testFile(test, 'myinputfile', function(testHandle) {
var results = processFile(testHandle.inputPath);
testHandle.writeObservedOutput(results);
});
}Now, generate your expected output:
$ UPDATE_REGTEST_DATA=1 nodeunit regtest.coffeeThe expected output is stored in the test-data directory:
something/something/lib/test
\_ regtest.coffee
\_ test-data
\_ myinputfile
\_ myinputfile.expectedRun the test again, it should pass:
$ nodeunit regtest.coffeeIf you like, change myinputfile.expected, and verify that the test fails.
Add all the new files to git, and you're done!
nodeunit
regtester assumes that you're using nodeunit. If you want to use another framework, you'll
need to pass in an object providing the functions normally provided by nodeunit's test handle.
For example:
var testStub = {
expect: function(n) { /* expect n calls to `ok` before `done` is called */ }
fail: function(msg) { /* print msg, cause test to fail */ },
done: function() { /* signals that the test is over (test may be async) */ }
ok: function(msg) { /* asserts that a particular point in the test was reached */ }
};
testData.testFile(testStub, 'myinputfile', function(testHandle) { ... });