1 | # Mock FS
|
2 |
|
3 | A configurable mock file system. You know, for testing.
|
4 |
|
5 | ## Example
|
6 |
|
7 | The code below creates a mock `fs` module that is configured to work with a few mock files and directories.
|
8 |
|
9 | ```js
|
10 | var mock = require('mock-fs');
|
11 |
|
12 | var fs = mock.fs({
|
13 | 'path/to/fake/dir': {
|
14 | 'some-file.txt': 'file content here',
|
15 | 'empty-dir': {/** empty directory */}
|
16 | },
|
17 | 'path/to/some.png': new Buffer([8, 6, 7, 5, 3, 0, 9]),
|
18 | 'some/other/path': {/** another empty directory */}
|
19 | });
|
20 | ```
|
21 |
|
22 | If you are testing a module that `require`s the real `fs` module, you can use [`rewire`](https://npmjs.org/package/rewire) to inject a mock `fs` module for testing.
|
23 |
|
24 | ```js
|
25 | var rewire = require("rewire");
|
26 | var moduleToTest = rewire('./path/to/module');
|
27 |
|
28 | // inject the mock fs created above
|
29 | moduleToTest.__set__('fs', fs);
|
30 |
|
31 | // now functions in moduleToTest will use
|
32 | // your mock fs instead of the real one
|
33 | ```
|
34 |
|
35 | ## Status
|
36 |
|
37 | The table below shows what is covered by the mock `fs`. Tests are currently run on Node 0.8 and 0.10. Eventually more versions will be supported.
|
38 |
|
39 | | function | status | notes |
|
40 | |------------------------|:------:|----------|
|
41 | | `fs.rename` | 100% | Complete |
|
42 | | `fs.renameSync` | 100% | Complete |
|
43 | | `fs.ftruncate` | 100% | Complete |
|
44 | | `fs.ftruncateSync` | 100% | Complete |
|
45 | | `fs.truncate` | 100% | Complete |
|
46 | | `fs.truncateSync` | 100% | Complete |
|
47 | | `fs.chown` | 100% | Complete |
|
48 | | `fs.chownSync` | 100% | Complete |
|
49 | | `fs.fchown` | 100% | Complete |
|
50 | | `fs.fchownSync` | 100% | Complete |
|
51 | | `fs.lchown` | 100% | Complete |
|
52 | | `fs.lchownSync` | 100% | Complete |
|
53 | | `fs.chmod` | 100% | Complete |
|
54 | | `fs.chmodSync` | 100% | Complete |
|
55 | | `fs.fchmod` | 100% | Complete |
|
56 | | `fs.fchmodSync` | 100% | Complete |
|
57 | | `fs.lchmod` | 100% | Complete |
|
58 | | `fs.lchmodSync` | 100% | Complete |
|
59 | | `fs.stat` | 90% | Provides a [stats object](#Stats) |
|
60 | | `fs.lstat` | 0% | Implement `binding.lstat` |
|
61 | | `fs.fstat` | 90% | Provides a [stats object](#Stats) |
|
62 | | `fs.statSync` | 90% | Provides a [stats object](#Stats) |
|
63 | | `fs.lstatSync` | 0% | Implement `binding.lstat` |
|
64 | | `fs.fstatSync` | 90% | Provides a [stats object](#Stats) |
|
65 | | `fs.link` | 0% | Implement `binding.link` |
|
66 | | `fs.linkSync` | 0% | Implement `binding.link` |
|
67 | | `fs.symlink` | 0% | Implement `binding.symlink` |
|
68 | | `fs.symlinkSync` | 0% | Implement `binding.symlink` |
|
69 | | `fs.readlink` | 0% | Implement `binding.readlink` |
|
70 | | `fs.readlinkSync` | 0% | Implement `binding.readlink` |
|
71 | | `fs.realpath` | 0% | Implement `binding.readlink` & `binding.lstat` |
|
72 | | `fs.realpathSync` | 0% | Implement `binding.readlink` & `binding.lstat` |
|
73 | | `fs.unlink` | 100% | Complete |
|
74 | | `fs.unlinkSync` | 100% | Complete |
|
75 | | `fs.rmdir` | 100% | Complete |
|
76 | | `fs.rmdirSync` | 100% | Complete |
|
77 | | `fs.mkdir` | 100% | Complete |
|
78 | | `fs.mkdirSync` | 100% | Complete |
|
79 | | `fs.readdir` | 100% | Complete |
|
80 | | `fs.readdirSync` | 100% | Complete |
|
81 | | `fs.close` | 100% | Complete |
|
82 | | `fs.closeSync` | 100% | Complete |
|
83 | | `fs.open` | 100% | Complete |
|
84 | | `fs.openSync` | 100% | Complete |
|
85 | | `fs.utimes` | 0% | Implement `binding.utimes` |
|
86 | | `fs.utimesSync` | 0% | Implement `binding.utimes` |
|
87 | | `fs.futimes` | 0% | Implement `binding.futimes` |
|
88 | | `fs.futimesSync` | 0% | Implement `binding.futimes` |
|
89 | | `fs.fsync` | 0% | Implement `binding.fsync` |
|
90 | | `fs.fsyncSync` | 0% | Implement `binding.fsync` |
|
91 | | `fs.write` | 100% | Complete |
|
92 | | `fs.writeSync` | 100% | Complete |
|
93 | | `fs.read` | 100% | Complete |
|
94 | | `fs.readSync` | 100% | Complete |
|
95 | | `fs.readFile` | 100% | Complete |
|
96 | | `fs.readFileSync` | 100% | Complete |
|
97 | | `fs.writeFile` | 100% | Complete |
|
98 | | `fs.writeFileSync` | 100% | Complete |
|
99 | | `fs.appendFile` | 100% | Complete |
|
100 | | `fs.appendFileSync` | 100% | Complete |
|
101 | | `fs.watchFile` | 0% | Implement `binding.StatWatcher` |
|
102 | | `fs.unwatchFile` | 0% | Implement `binding.StatWatcher` |
|
103 | | `fs.watch` | 0% | Implement `fs.FSWatcher` |
|
104 | | `fs.exists` | 100% | Complete |
|
105 | | `fs.existsSync` | 100% | Complete |
|
106 | | `fs.Stats` | 90% | <a name='Stats'></a>Incudes `mode`, `size`, `atime`, `ctime`, `mtime`, `uid`, `gid`, `isFile()`, and `isDirectory()` |
|
107 | | `fs.createReadStream` | 100% | Complete |
|
108 | | `fs.ReadStream` | 100% | Complete |
|
109 | | `fs.createWriteStream` | 100% | Complete |
|
110 | | `fs.WriteStream` | 100% | Complete |
|
111 | | `fs.FSWatcher` | 0% | Implement `fs.FSWatcher` |
|
112 | | `fs.fdatasync` | 0% | Implement `binding.fdatasync` |
|
113 | | `fs.fdatasyncSync` | 0% | Implement `binding.fdatasync` |
|
114 |
|
115 | [![Current Status](https://secure.travis-ci.org/tschaub/mock-fs.png?branch=master)](https://travis-ci.org/tschaub/mock-fs)
|