У меня есть сценарий рабочего узла, и теперь я пытаюсь изучить mocha/chai, чтобы добавить некоторые модульные тесты.mocha/chai return undefined
//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 для тестирования, я получаю undefined?
Благодаря
Редакции:
Так на основе того, что @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);
})
});
Но это все еще возвращает неопределенный.
Вы показали свою оригинальную реализацию, исходный код тестирования и новую реализацию, но также должны показать новый тестовый код, который вы используете сейчас. В идеале, ваш вопрос должен содержать [mcve]. – Louis
@Louis не уверен, что я понимаю ваш комментарий. Я сказал, что я попытался изменить код модуля для использования обратных вызовов, но это не сработало. Я не изменил свой тестовый код. – tjmgis
Ну, тогда почему это должно работать * вообще *, если вы не изменили свой тестовый код? В вашем тестовом коде вы вызываете 'findData (путь)' без передачи обратного вызова, но ваш новый 'findData' требует обратного вызова. – Louis