Create/copy directory to temporary directory
npm install fixture-dirCreate/copy directory to temporary directory
fixture-dir was built for quickly setting up/tearing down directories that originate from tests but should not contaminate the repo. Previous to fixture-dir's creation, I have used this pattern in [foundry-release-git][] and [sexy-bash-prompt][].
[foundry-release-git]: https://github.com/twolfson/foundry-release-git/blob/1.0.1/test/utils/fixtures.js
[sexy-bash-prompt]: https://github.com/twolfson/sexy-bash-prompt/blob/0.21.0/test/prompt_test.sh#L8-L19
A mocha flavor is available, [mocha-fixture-dir][], which provides automatic directory cleanup.
[mocha-fixture-dir]: https://github.com/twolfson/mocha-fixture-dir
npm install fixture-dir``javascript
// Generate a tmp namespace for our tests
var exec = require('child_process').exec;
var FixtureDir = require('fixture-dir');
var fixtureDir = new FixtureDir('my-node-module-tests');
// Inside of our tests, copy over folder contents and interact with them
before(function () {
// Create a git-log folder with the contents of our git-log fixture.git
var that = this;
fixtureDir.mkdir({
folderName: 'git-log',
copyFrom: __dirname + '/test-files/git-log' // Folder with activitygit log
}, function (err, dir) {
// Save the directory for cleanup and callback
that.dir = dir;
done();
});
});
before(function (done) {
// Run in our directory (/tmp/my-node-module-tests/git-log)
exec('git log', {cwd: this.dir.path}, function (err, stdout, stderr) {
// Save our stdout and callback
this.stdout = stdout;
done(err);
});
});
after(function (done) {
// Cleanup our directory
this.dir.destroy(done);
delete this.done;
});
it('retrieved git log in our fixture directory', function () {`
assert(this.stdout);
});
returns the FixtureDir constructor via its module.exports.$3
Constructor for fixture directory namespaces inside of /tmp (or your equivalent temporary directory).- folderName
String, Folder to create all subsequent temporary directories inside of
- We require this to be reduce pollution of the /tmp folder names
- The folder path will be /tmp/{{folderName}} (e.g. /tmp/hai for {folderName: 'hai'}####
FixtureDir#mkdir([options], cb)
- options Object, Optional container for various flags/parameters
- options.folderName String, Folder name to create
- The folder path will be /tmp/top-level/{{folderName}} (e.g. /tmp/top-level/world for {folderName: 'world'}
- If this is not provided, we will use a random string generated by [tmp][]
- options.copyFrom String, Path to source folder to copy contents from
- cb Function, Error-first callback function with signature (err, dir)
- err Error|null, If any errors occurred then this will be it
- dir Directory, Instance of Directory for folder we just created[tmp]: https://github.com/raszi/node-tmp
$3
Class representation of a directory for getting path and cleaning up####
Directory.path
Filepath to directory (e.g. /tmp/my-node-module-tests/git-log)####
Directory.destroy(cb)
Method to clean up temporary directory (usually for next test run)- cb
Function, Error-first callback function with signature (err)
- err Error|null, If any errors occurred then this will be itExamples
Creating a temporary folder with no contents:`js
var fixtureDir = new FixtureDir('my-node-module-tests');
before(function () {
var that = this;
fixtureDir.mkdir(function (err, dir) {
// Generated directory /tmp/my-node-module-tests/abc123
that.dir = dir;
done();
});
});
`Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via grunt and test via npm test`.[![Support via Gittip][gittip-badge]][gittip]
[gittip-badge]: https://rawgithub.com/twolfson/gittip-badge/master/dist/gittip.png
[gittip]: https://www.gittip.com/twolfson/
It has been released under the [UNLICENSE][].
[UNLICENSE]: UNLICENSE