2

我是 JavaScript 中 Promises 的新手,虽然它似乎在某种程度上对我有用,但我无法测试“拒绝”值。

我正在通过一个错误,并希望确保它是一个错误,更重要的是,错误代码与我的期望相匹配。

return new Promise(function(resolve, reject){
    tableService.deleteEntity(config.azureTable.tableName,
                              visitor.azureEntity(), function (error, response) {

        //  If successful, go on.
        if (!error) {
            resolve(response);
        }

        //  If unsuccessful, log error.
        else {
            /*  If we know it's a resourceNotFound
                that's causing the error, return that. */
            if (error.code === 'ResourceNotFound') {
                reject(new Error('Record not found'));
            }

            //  For unexpected errros.
            else {
                reject(new Error('Table service error (delete): ' + error));
            }
        }

    });

});

测试,在 Mocha 中 - 使用 chai 和 chai-as-promised。其他一切都在工作(我有 24 个通过测试)——但这个让我卡住了!

it('return an error when the lookup fails', function (done) {

        storage.delete(globalUUID).then(function(sucess) {

            done(sucess);

        }, function(error) {

            expect(error).to.be.an(Error);
            done();

        });

    });

任何帮助将不胜感激。

4

1 回答 1

0

您没有chai-as-promised在任何地方使用。如果您的第一个代码示例是storage.delete方法的主体,那么您的测试应该如下所示:

it('return an error when the lookup fails', function() {
    expect(storage.delete(globalUUID)).to.be.rejectedWith(Error);
});
于 2018-03-17T12:05:06.930 回答