我的getFiles
模块我有方法_get
来获取目录中的文件。然后,它将用于读取每个文件的内容并将其上载到S3存储桶。但是,当我运行getFiles
的测试时,files
的值为undefined
。
我在这里缺少什么?
我的模块所在的文件readDirectory.js
:
'use strict';
var fs = require('fs');
var _getFiles = {};
_getFiles._get = function (path, callback) {
fs.readdir(path, function (error, files) {
console.log(path);
console.log(files);
callback(files);
});
};
module.exports = _getFiles;
使用mocha
,chai
和sion
进行测试:
describe("readDirectory run", function () {
var testedModule, callbackSpy, readFileStub;
before(function () {
readFileStub = sinon.stub();
callbackSpy = sinon.spy();
testedModule = require('../readDirectory.js');
mockDir({
tmp: {
images: {
"thumb_test.txt": "thumbnail pic",
"small_test.txt": "small pic",
"medium_test.txt": "medium pic"
}
}
});
});
after(function () {
mockDir.restore();
});
it("returns list of files", function () {
testedModule._get(mockDir, function () {console.log(files);});
});
});
这是测试的结果,除了运行代码之外,它还没有测试任何东西:
readDirectory run
✓ returns list of files
{ [Function: mock]
restore: [Function],
fs: [Function],
file: [Function],
directory: [Function],
symlink: [Function] }
undefined
答案 0 :(得分:0)
Ben Fortune的答案在达成解决方案时具有确定性,但不完整。
在将测试目录传递给测试模块时,我错误地使用了模拟目录。所以不是我在问题中的内容,而应该是:
....
it("returns list of files", function () {
testedModule._get("tmp/images/", function (files) {
console.log("Files from callback, %s", files);
});
});
....
请注意我不再将对象mockDir
作为testedModule
的第一个参数传递,而是将我创建的目录模拟的实际路径tmp/images/