我正在 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 回调返回错误?