我使用 Chai、Mocha 和 Sinon 作为我的测试框架。
现在,我对此工作进行了测试,但实际上我必须创建一个目录并将文件放入其中以使我的测试真正执行某些操作(这将是一个大型测试套件,因此使用所有这些进行操作至少可以说,diskIO 并不理想)。如何停止注入(inject)机制,以便在测试中不必接触磁盘?
我在想,在下面的示例代码中,有某种方法可以对 fs.readdir 方法注入(inject)的 err
和 files
参数进行 stub 处理。这样,我就可以避免在单元测试中测试 fs.readdir 。我进行了一些谷歌搜索并查看了 API 文档,但没有找到我需要的内容(或者无法识别它)。
这是我正在讨论的一些示例代码:
正在测试的功能
function fsFxnWrapper(dir, callback) {
var doSomeMutation = function (files) {
...
};
fs.readdir(dir, function(err, files) {
callback(err, doSomeMutation(files));
});
}
示例测试用例
describe('When the directory has things'', function () {
before(function () {
...
});
after(function () {
...
});
// I'm not sure how to write my stubs so that fs.readdir inside of the
// fsFxnWrapper doesn't have to go out to the filesystem to retrieve something...
it('should do the proper mutation on the files list', function () {
var valueAfterMutation = [ /* the expected answer */];
fsFxnWrapper('test/dir', function (err, files) {
expect(files).to.deep.equal(valueAfterMutation);
expect(err).to.equal(null);
});
});
});
最佳答案
如果您在 Node.js 下工作,您可能会考虑一些模拟库:node-mocks , mock-fs
关于javascript - 我如何 stub fs 回调的注入(inject)参数以消除在测试套件中接触文件系统的需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731628/