Я пытаюсь создать систему для проведения некоторого тестирования, поэтому, когда я реализую новую функцию, я могу запустить тест и посмотреть, все ли существующие функции, кажется, все еще работают.Моя система работает частично.
Это работает (исключение генерируется и обрабатывается должным образом):
unit['this will throw'] = function(done){
assert.equal(true, false);
done();
};
Это не работает (исключение генерируется и вообще не обрабатывается -> происходит сбой приложения):
unit['lib_data.getUserData should callback a false error and valid data'] = function(done){
lib_data.getUserData('12345', function(err, userData){
assert.equal(true, false);
done();
});
};
Что я делаю не так?Я уже пытался поставить assert.equal(true, false);
на одну строку выше вызова функции, которая работает, как и ожидалось.Использование правильного вызова assert.equal(err, false);
работает также просто отлично.Если я изменю функцию, чтобы она всегда вызывала ошибку, то же самое снова плохое поведение.
Просто для справки полный код: index.js (который вызывается для запуска теста):
//Create the container
var app = {};
//Container for all tests
app.tests = {};
//Dependencies
const config = require('./../config.js');
const log = require('./../lib/log.js')
app.tests.unit = require('./unit.js');
//Counts all tests
app.count = function(){
var count = 0;
for(let key in app.tests){
if(app.tests.hasOwnProperty(key)){
let subTests = app.tests[key];
for(var name in subTests){
if(subTests.hasOwnProperty(name)) count ++;
}
}
}
return count;
};
app.run = function(){
var errors = [];
var successes = 0;
var limit = app.count();
var count = 0;
for(let key in app.tests){
if(app.tests.hasOwnProperty(key)){
let subTests = app.tests[key];
for(let name in subTests){
if(subTests.hasOwnProperty(name)){
(function(){
let curName = name;
let testValue = subTests[name];
//Call the test
try{
testValue(function(){
//If this doesnt throw, it succeeded -> log it in green
console.log('\x1b[32m%s\x1b[0m',curName);
count++;
successes++;
if(count == limit){
app.produceReport(limit, successes, errors);
}
});
}catch(e){
//If this throws, it didnt succeed -> log in red
errors.push({
'name': name,
'error': e
});
console.log('\x1b[31m%s\x1b[0m',curName);
count++;
if(count == limit){
app.produceReport(limit, successes, errors);
}
}
})();
}
}
}
}
};
//Produces a test report in the console
app.produceReport = function(limit, successes, errors){
//Doesnt matter for the problem?
};
//Run tests
app.run();
unit.js (содержит все актуальные проверки утверждений)
//Dependencies
const config = require('./../config.js');
const assert = require('assert');
const lib_data = require('./../lib/data.js');
//Create the container
var unit = {};
//All unit tests from here on
unit['lib_data.getUserData should callback a false error and valid data'] = function(done){
lib_data.getUserData('12345', function(err, userData){
assert.equal(true, false);
assert.ok(typeof(userData) == 'object');
assert.ok(userData.discord == '12345');
assert.ok(JSON.stringify(userData).length > 10);
done();
});
};
unit['this will throw'] = function(done){
assert.equal(true, false);
done();
};
//Export the container
module.exports = unit;
Спасибо за помощь!