Mock檔案系統相關的工具包括:
Mock fs 模組的工具mock-fs 。
Mock require 模組的工具mock-require 。
安裝
mock-fs和 mock-require 都是NPM軟體包,在專案中可透過npm直接安裝:
npm install mock-fs mock-require --save
Mock 可的Mock並立即生效, 此後對fs的呼叫都會存取這些Mock檔案。 呼叫mock.restore()可取消Mock並還原fs。
var fs = require('fs'); var mock = require('mock-fs'); describe('fs', function() { beforeEach(function() { mock({ './CNAME': 'harttle.com', './_config.yml': 'empty' }); }); afterEach(function() { mock.restore(); }); describe('#readFileSync()', function() { it('should read all content', function() { var str = fs.readFileSync('CNAME', 'utf8'); expect(str).to.equal('harttle.com'); }); }); });
Mock require 機制
mock-fs的原理是重寫fs模組的檔案讀寫功能,重新導向到Mock檔案。 所以對require並不行。 為了讓require讀取Mock文件,只能重寫require方法。 mock-require便是封裝了該操作。
透過mock方法進行Mock,透過mock.stopAll停止Mock並恢復require。
const mock = require('mock-require'); describe('parser', function() { beforeEach(function() { mock('/package.json', { "name": "sample-module", "version": "1.0.0", "view": "htmls/my-html.hbs", "router": "svr.js" }); }); afterEach(function() { mock.stopAll(); });