【发布时间】:2016-05-04 14:07:12
【问题描述】:
我有一个工作节点脚本,现在正在尝试学习 mocha/chai 以添加一些单元测试。
//Module Code
var path = require('path');
var recursive = require('recursive-readdir');
function findData(folderPath) {
recursive(folderPath, function (err, files) {
return files;
});
};
module.exports.findData = findData;
我的摩卡测试代码:
var expect = require('chai').expect;
describe('checkData', function () {
var findData = require('../custom_modules/findData').findData;
var path;
before (function () {
path = '/Data'
});
it('should have 53 files in array', function () {
expect(findData(path)).to.have.lengthOf(53);
})
});
但是,它总是失败,因为返回似乎是未定义的。所以我剥离了我的模块代码来测试 return true 并且有效。
所以它必须是递归模块的异步特性,所以我尝试在我的模块代码中添加回调:
var path = require('path');
var recursive = require('recursive-readdir');
function findData(folderPath, cb) {
recursive(folderPath, function (err, files) {
cb(null, files);
});
};
module.exports.findData = findData;
但这也没有用。
奇怪的是,如果我运行node index.js,我会得到文件列表。
谁能向我解释这段代码如何正常工作,但是当我尝试使用 mocha/chai 进行测试时,我得到了未定义?
谢谢
已编辑:
因此,根据@Louis 在 cmets 中所说的,我为函数添加了回调。
describe('checkData', function () {
var findData = require('../custom_modules/findData').findData;
var path;
var files;
before (function () {
path = '/Users/tjmartin/Documents/OSData/OpenNames/Data'
});
it('should have 53 files in array', function () {
expect(findData(path, function(results) {
files = results;
})).to.have.lengthOf(53);
})
});
但这仍然返回一个未定义的。
【问题讨论】:
-
您已经展示了您的原始实现、您的原始测试代码和您的新实现,但您还应该展示您现在正在使用的新测试代码。理想情况下,您的问题应包含minimal reproducible example。
-
@Louis 不确定我是否理解您的评论。我说过我试图更改我的模块代码以使用回调,但这没有用。我没有更改我的测试代码。
-
那么,如果你没有修改你的测试代码,为什么它完全可以工作呢?在您的测试代码中,您正在调用
findData(path)而不传递回调,但您的新findData需要回调。 -
@Louise 我试图在我的期望测试中向函数添加回调,但它仍然返回未定义。