mocha/chai return 未定义
mocha/chai return undefined
我有一个工作节点脚本,现在正在尝试学习 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 似乎未定义。所以我剥离了我的模块代码来测试 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 在评论中所说的内容,我向该函数添加了一个回调。
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);
})
});
但这仍然return未定义。
首先,我会在您的 findData 实现中记录错误结果。即使只是在开发期间,您也可以轻松查看是否报告了任何错误(您可能已经在这样做,只是想提一下)。
如您所见,造成问题的主要原因之一是回调是异步的。因此,您不能像在原始示例中那样简单地从 findData 方法中 return 它。
接下来,我不会像您在之前的函数中那样对路径进行硬编码。而是使用本地路径,这样测试就可以 运行 作为 CI 的一部分(如果你有的话),甚至这样你就可以在另一台机器上获取它并让它在那里工作。
before(function() {
path = './tests/TestData';
});
在您修改后的示例中,尽管您使用的是回调,但您仍在测试 return 结果。您需要更改测试以使用回调的结果。
it('should have 53 files in array', function(done) {
findData(path, function(results) {
expect(results).to.have.lengthOf(53);
done();
});
});
我有一个工作节点脚本,现在正在尝试学习 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 似乎未定义。所以我剥离了我的模块代码来测试 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 在评论中所说的内容,我向该函数添加了一个回调。
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);
})
});
但这仍然return未定义。
首先,我会在您的 findData 实现中记录错误结果。即使只是在开发期间,您也可以轻松查看是否报告了任何错误(您可能已经在这样做,只是想提一下)。
如您所见,造成问题的主要原因之一是回调是异步的。因此,您不能像在原始示例中那样简单地从 findData 方法中 return 它。
接下来,我不会像您在之前的函数中那样对路径进行硬编码。而是使用本地路径,这样测试就可以 运行 作为 CI 的一部分(如果你有的话),甚至这样你就可以在另一台机器上获取它并让它在那里工作。
before(function() {
path = './tests/TestData';
});
在您修改后的示例中,尽管您使用的是回调,但您仍在测试 return 结果。您需要更改测试以使用回调的结果。
it('should have 53 files in array', function(done) {
findData(path, function(results) {
expect(results).to.have.lengthOf(53);
done();
});
});