Detalhes do pacote

with-local-tmp-dir

dword-design6.9kMIT5.1.1

Creates a temporary folder inside cwd, cds inside the folder, runs a function, and removes the folder. Especially useful for testing.

cleanup, cwd, directory, function

readme (leia-me)

with-local-tmp-dir

npm version Linux macOS Windows compatible Build status Coverage status Dependency status Renovate enabled
Open in Gitpod Buy Me a Coffee PayPal Patreon

Creates a temporary folder inside cwd, cds inside the folder, runs a function, and removes the folder. Especially useful for testing. This package can be used to write file-based tests with real files. See below for some examples. ## Install bash # npm $ npm install with-local-tmp-dir # Yarn $ yarn add with-local-tmp-dir ## Basic Usage js const withLocalTmpDir = require('with-local-tmp-dir') const fs = require('fs-extra') await withLocalTmpDir(() => { console.log(process.cwd()) //> /Users/max/project/tmp-18815DudQxmdn03Rz // Create some files await fs.outputFile('foo.txt', 'foo bar') await fs.outputFile('bar.txt', 'foo bar') }) // Now the folder does not exist anymore // The folder is removed even if an exception is thrown await withLocalTmpDir(() => throw new Error('File could not be found')) ## Reset Instead of a function you can reset the state yourself instead of passing a function, i.e. change to the previous folder and remove the folder: js const withLocalTmpDir = require('with-local-tmp-dir') const fs = require('fs-extra') // You can still pass options const reset = await withLocalTmpDir() console.log(process.cwd()) //> /Users/max/project/tmp-18815DudQxmdn03Rz // Create some files await fs.outputFile('foo.txt', 'foo bar') await fs.outputFile('bar.txt', 'foo bar') await reset() // Now the folder does not exist anymore ## Options You can specify an options object that is passed down to tmp-promise. Check the readme for details. Some default values are adjusted, but they still can be overridden. js const withLocalTmpDir = require('with-local-tmp-dir') const fs = require('fs-extra') // do not cleanup if there are files await withLocalTmpDir(() => { await fs.outputFile('foo.txt', 'foo bar') }, { unsafeCleanup: false }) // run in a subfolder await withLocalTmpDir(() => { console.log(process.cwd()) //> /Users/max/project/foo/tmp-18815DudQxmdn03Rz }, { dir: 'foo' }) // use a different prefix await withLocalTmpDir(() => { console.log(process.cwd()) //> /Users/max/project/foo-18815DudQxmdn03Rz }, { prefix: 'foo' }) ## Unit Tests with output-files and endent The most common use case for this package is probably unit tests with Mocha or Jest. The package itself is framework-agnostic, so you can use any of them. To make life easier when writing multiple files with multi-line text content, there are two handy packages: output-files and endent. The following is an example for Mocha: js const withLocalTmpDir = require('with-local-tmp-dir') const outputFiles = require('output-files') const endent = require('endent') const funcToTest = require('.') beforeEach(async function () { this.resetWithLocalTmpDir = await withLocalTmpDir() }) afterEach(async function () { await this.resetWithLocalTmpDir() }) it('works', async () => { await outputFiles({ 'foo.txt': endent` Lorem ipsum dolor sit `, 'index.js': endent` export default { foo: 1, bar: 2, } `, }) funcToTest() }) ## Git-based tests It is also possible to test libraries that make use of Git. You can instantiate a local Git repository inside the temporary folder and run Git operations on it: js const withLocalTmpDir = require('with-local-tmp-dir') const fs = require('fs-extra') const execa = require('execa') beforeEach(async function () { this.resetWithLocalTmpDir = await withLocalTmpDir() }) afterEach(async function () { await this.resetWithLocalTmpDir() }) it('works', async () => { await execa.command('git init') await execa.command('git config user.email "foo@bar.de"') await execa.command('git config user.name "foo"') await outputFile('foo.txt', 'foo bar') await execa.command('git add .') await execa.command('git commit -m "feat: init"') funcToTest() }) Be careful though, if the repository is not properly initialized, your user Git config might be overridden! ## Contribute Are you missing something or want to contribute? Feel free to file an issue or a pull request! ⚙️ ## Support Hey, I am Sebastian Landwehr, a freelance web developer, and I love developing web apps and open source packages. If you want to support me so that I can keep packages up to date and build more helpful tools, you can donate here:

Buy Me a Coffee  If you want to send me a one time donation. The coffee is pretty good 😊.
PayPal  Also for one time donations if you like PayPal.
Patreon  Here you can support me regularly, which is great so I can steadily work on projects.

Thanks a lot for your support! ❤️

See also

  • output-files: Output a tree of files and directories by providing an object. Especially useful for testing with real files.
  • expect-mocha-image-snapshot: A wrapper around jest-image-snapshot that makes it compatible to Mocha.
  • jest-image-matcher: A Jest matcher for image comparisons based on pixelmatch. Can also be used with Mocha. Useful for visual regression testing.
  • unify-mocha-output: Adjusts a Mocha output so that it is consistent across platforms and can be used for snapshot testing. Basically adjusts the checkmark symbol and removes time values.
  • mock-argv: Temporarily overrides the command line arguments. This is useful for testing.

License

MIT License © Sebastian Landwehr

changelog (log de mudanças)

5.1.1 (2024-03-12)

Bug Fixes

5.1.0 (2024-03-02)

Features

5.0.1 (2023-04-09)

Bug Fixes

  • update dependency @dword-design/functions to v4.1.7 (5f5c35f)

5.0.0 (2023-01-08)

Bug Fixes

BREAKING CHANGES

  • drop node 12, move to esm

4.1.0 (2022-09-19)

Features

4.0.11 (2022-01-12)

Bug Fixes

4.0.10 (2022-01-04)

Bug Fixes

4.0.9 (2021-08-09)

Bug Fixes

4.0.8 (2021-07-20)

Bug Fixes

4.0.7 (2021-07-06)

Bug Fixes

4.0.6 (2021-06-29)

Bug Fixes

4.0.5 (2021-06-14)

Bug Fixes

4.0.4 (2021-05-28)

Bug Fixes

4.0.3 (2021-05-04)

Bug Fixes

  • update dependency @dword-design/functions to v4 (#49) (d178636)

4.0.2 (2021-05-04)

Bug Fixes

  • update dependency fs-extra to v10 (#50) (2258cbc)

4.0.1 (2021-05-04)

Bug Fixes

  • update dependency @dword-design/chdir to v2 (#48) (237aa10)

4.0.0 (2021-05-03)

Bug Fixes

  • update dependency @dword-design/base to v8 (#47) (b65c6ef)

BREAKING CHANGES

  • require Node.js >= 12

Co-authored-by: Renovate Bot bot@renovateapp.com Co-authored-by: Sebastian Landwehr info@dword-design.de Co-authored-by: GitHub Actions actions@github.com

3.0.2 (2021-04-27)

Bug Fixes

3.0.1 (2021-04-21)

Bug Fixes

3.0.0 (2021-04-21)

Bug Fixes

  • remove path argument and add some doc (#44) (990f37a)

BREAKING CHANGES

  • use dir option instead

2.2.19 (2021-04-12)

Bug Fixes

2.2.18 (2021-03-31)

Bug Fixes

2.2.17 (2021-03-22)

Bug Fixes

2.2.16 (2021-03-17)

Bug Fixes

2.2.15 (2021-02-16)

Bug Fixes

  • update dependency @dword-design/base to v7 (#30) (601cf68)

2.2.14 (2021-02-15)

Bug Fixes

  • deps: update dependency delay to v5 (#29) (d4b82ce)

2.2.13 (2020-12-02)

Bug Fixes

  • config: Update changed files (6c8e0a3)

2.2.12 (2020-08-26)

Bug Fixes

2.2.11 (2020-07-04)

Bug Fixes

2.2.10 (2020-05-12)

Bug Fixes

  • fix for new tmp version (0524100)
  • deps: update dependency tmp-promise to v3 (e41de35)

2.2.9 (2020-03-19)

Bug Fixes

  • deps: update dependency fs-extra to v9 (85323a4)

2.2.8 (2020-02-19)

Bug Fixes