UNPKG

file-mock

Version:

A module which handle all your files creation and deletion for your tests

72 lines (58 loc) 1.96 kB
const path = require('path') const fs = require('fs') const rimraf = require('rimraf') const fileMock = { _createdFiles: [], mock: function (filesObject) { this.fillCreatedFiles(filesObject) for (let i = 0; i < this._createdFiles.length; i++) { this._createdFiles[i] = this.createPathAndFile(this._createdFiles[i]) } }, createPathAndFile: function (fileToCreate) { let splittedPath = fileToCreate.path.split('/') let firstCreated = null let tmpPath = '/' for (let i = 0; i < splittedPath.length; i++) { tmpPath = path.join(tmpPath, splittedPath[i]) if (i + 1 >= splittedPath.length) { firstCreated = (firstCreated === null) ? tmpPath : firstCreated fs.writeFileSync(tmpPath, fileToCreate.content) } else if (!fs.existsSync(tmpPath)) { firstCreated = (firstCreated === null) ? tmpPath : firstCreated fs.mkdirSync(tmpPath) } } fileToCreate.toDelete = firstCreated return fileToCreate }, fillCreatedFiles: function (filesObject, _currentPath = '') { for (let i = 0; i < Object.keys(filesObject).length; i++) { let objectPath = Object.keys(filesObject)[i] let value = filesObject[objectPath] let pathStart = _currentPath if (pathStart === '') { pathStart = (objectPath.startsWith('/')) ? objectPath : path.join(process.cwd(), objectPath) } else { pathStart = path.join(pathStart, objectPath) } if (typeof value === 'object') { this.fillCreatedFiles(value, pathStart) } else { this._createdFiles.push({ path: pathStart, content: value }) } } }, restore: function () { for (let i = 0; i < this._createdFiles.length; i++) { if (this._createdFiles[i].toDelete != undefined) { rimraf.sync(this._createdFiles[i].toDelete) } } this._createdFiles = [] } } module.exports = fileMock