У меня есть простой асинхронный код, написанный в Node.JS, который добавляет строку в Redis SET. Вот код, он будет сохранен в файле под названием redis_ops.jsNode-Redis Асинхронное тестирование с использованием mocha
var redis = require('redis');
exports.addUser= function(){
var client = redis.createClient();
client.on("error",function(err){
console.log('Error'+ err);
});
client.select(1);
client.sadd("users","naveen",function(err,reply){
if(err)
throw err;
return reply;
});
console.log("at the end of the adduser function")
}
Поскольку client.sadd является асинхронным, функция, содержащая client.sadd возвращается до client.sdd отделки. Вот тест написано с использованием Мокко
var assert = require("assert");
var core = require('./redis_ops.js');
describe('COREAPI', function(){
describe('addUser', function(){
it('should return 1 if the user is added successfully', function(){
assert.equal(1,core.addUser());
})
})
})
Тест терпит неудачу, поскольку redis_ops возвращает неопределенное (не возвращаемого значения), поскольку функция, содержащую client.sadd возвращает первый и асинхронные client.sadd возвращаются позже с предполагаемым значением для утверждается в тесте. Как проверить возвращаемое значение из асинхронного client.sadd без дублирования кода или без содержания всего кода в том же файле?
Большое спасибо за помощь мне понять тестирования асинхронного кода ..Very полезный ответ. –
С одной стороны 'core.addUser (function (err, result) {...', но с другой стороны 'export.addUser = function() {...'. Отсутствует параметр 'callback', возможно? Более того, 'client.on (« error », function (err) {callback (err);});' не может работать, поскольку в области не существует 'callback'. – Louis
@Louis yup, что' callback' должен был быть ' console.error'. «Ядро» правильное, хотя, поскольку предположительно «core» является именем модуля, для которого мы добавляем функции к экспорту, т. е. верхний список находится в тестовом модуле, нижние два находятся в пределах 'core'. – qubyte