diff --git a/README.md b/README.md index e184fc6..c8087e4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![dependencies Status](https://david-dm.org/vinsonchuong/ava-patterns/status.svg)](https://david-dm.org/vinsonchuong/ava-patterns) [![devDependencies Status](https://david-dm.org/vinsonchuong/ava-patterns/dev-status.svg)](https://david-dm.org/vinsonchuong/ava-patterns?type=dev) -An awesome package +Some useful helpers for tests in AVA. ## Usage Install [ava-patterns](https://www.npmjs.com/package/ava-patterns) @@ -13,3 +13,20 @@ by running: ```sh yarn add ava-patterns ``` + +### `useTemporaryDirectory()` +Create a temporary directory and delete it (and its contents) at the end of the +test. + +```js +import test from 'ava' +import * as path from 'path' +import {promises as fs} from 'fs' +import {useTemporaryDirectory} from 'ava-patterns' + +test('writing files', async (t) => { + const directory = await useTemporaryDirectory(t) + await fs.writeFile(path.join(directory, 'file.txt'), 'Hello World!') + t.pass() +}) +``` diff --git a/index.js b/index.js index 6016c47..da7a21e 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -export default 'Hello World!' +export {default as useTemporaryDirectory} from './use-temporary-directory/index.js' diff --git a/package.json b/package.json index 18fe69e..7aa97c0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ava-patterns", "version": "0.0.0", - "description": "An awesome package", + "description": "Some useful helpers for tests in AVA", "keywords": [], "homepage": "https://github.com/vinsonchuong/ava-patterns", "bugs": "https://github.com/vinsonchuong/ava-patterns/issues", @@ -13,7 +13,10 @@ "release": "semantic-release" }, "type": "module", - "dependencies": {}, + "dependencies": { + "fs-extra": "^9.0.1", + "tempy": "^0.6.0" + }, "devDependencies": { "ava": "^3.12.1", "semantic-release": "^17.1.1", diff --git a/test.js b/test.js deleted file mode 100644 index 31549e6..0000000 --- a/test.js +++ /dev/null @@ -1,6 +0,0 @@ -import test from 'ava' -import greeting from './index.js' - -test('exporting "Hello World!"', (t) => { - t.is(greeting, 'Hello World!') -}) diff --git a/use-temporary-directory/index.js b/use-temporary-directory/index.js new file mode 100644 index 0000000..5b09d71 --- /dev/null +++ b/use-temporary-directory/index.js @@ -0,0 +1,11 @@ +import fs from 'fs-extra' +import tempy from 'tempy' + +export default async function (t) { + const directory = tempy.directory() + await fs.ensureDir(directory) + t.teardown(async () => { + await fs.remove(directory) + }) + return directory +} diff --git a/use-temporary-directory/index.test.js b/use-temporary-directory/index.test.js new file mode 100644 index 0000000..c2d1a73 --- /dev/null +++ b/use-temporary-directory/index.test.js @@ -0,0 +1,16 @@ +import test from 'ava' +import {promises as fs} from 'fs' +import {useTemporaryDirectory} from '../index.js' + +test.serial('creating a directory', async (t) => { + const directory = await useTemporaryDirectory(t) + + const stats = await fs.stat(directory) + t.true(stats.isDirectory()) + + global.directory = directory +}) + +test.serial('cleaning up the directory', async (t) => { + await t.throwsAsync(fs.stat(global.directory)) +}) diff --git a/yarn.lock b/yarn.lock index a03e45d..456f9fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1893,7 +1893,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -2915,7 +2915,7 @@ from2@^2.1.0, from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^9.0.0: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== @@ -3494,7 +3494,7 @@ import-modules@^2.0.0: resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.0.0.tgz#9c1e13b4e7a15682f70a6e3fa29534e4540cfc5d" integrity sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw== -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -4387,11 +4387,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -4400,33 +4395,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -4467,11 +4440,6 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -7108,6 +7076,16 @@ tempy@^0.5.0: type-fest "^0.12.0" unique-string "^2.0.0" +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -7312,6 +7290,11 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"