Я работаю над простым диспетчером задач в SenecaJS и пытаюсь понять, как правильно выкидывать ошибки из действия. Скажем, у меня есть действие, которое загружает задачу из хранилища данных, а задача не существует ...
Ниже приведен метод из моего плагина:
/**
* Retrieves a task based on a task ID.
*
* @param {number} args.taskID The UUID of the task to be retrieved.
* @param {function} done A callback function which is called upon retrieval. The
* first argument is an error response; the second is the task.
* @returns {Task|undefined} A task if one exists; otherwise undefined.
*/
this.get = function(args, reply) {
var task = this.make('task')
task.load$( args.taskID, function(err, task)
if(!task || err) {
reply( {code:404, message:`Task ${args.taskID} not found.`} );
} else {
reply( task );
}
});
};
А это юнит-тест:
test('Returns "undefined" for non-existant tasks', (fin) => {
var seneca = testSeneca(fin);
var id = "I-don't-exist";
seneca
.act(
{ domain: 'task', action: 'get', taskID: id },
function(err, result) {
expect(result).not.toBeNull();
expect(result.code).toBe(404);
fin();
}
);
});
Код ниже работает, но, как вы можете видеть, я действительно игнорирую обратный вызов err и оцениваю результат, чтобы увидеть, является ли это ошибкой или нет. В документации Seneca использует следующее, чтобы выдать ошибку:
ответ (новая ошибка (404));
или
выбросить новую ошибку (404);
Но когда я это делаю, процесс завершается, и модульное тестирование не проходит. Кроме того, обратный вызов err всегда кажется нулевым, даже если я отвечаю двумя объектами.
Есть ли более правильный способ возврата ошибок, использующих обратный вызов err?