2017-03-16 157 views
0

我使用chai-as-promised库,并承诺由q库生成的承诺。 这个简单的测试用例应该可以工作(承诺必须被拒绝)或者我误解了承诺功能?承诺拒绝失败,承诺承诺

bdd.it("Test rejection", function() { 
    var promise = q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).then(function() { 
     // Nothing to do 
    }); 
    promise.should.be.rejectedWith(Error); 
    return promise; 
}); 

这个测试失败,错误:测试(我用的实习生作为单元测试库)althought以下测试通过:

bdd.it("Test rejection", function() { 
    var promise = q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).should.be.rejectedWith(Error); 
    return promise; 
}); 

回答

1

库需要你才能返回.rejectedWith()的返回值它来测试这个断言。你只是在考试中打电话.should.be.rejectedWith(),对此无能为力。

如果你看一下documentation for chai-as-promised,你可以看到,这是他们在自己的例子在做正是:

return promise.should.be.rejectedWith(Error); 

这同样适用于像.should.become()其他基于承诺,断言属实。

你的第二个测试是正确的。你也可以使用return,而不是结果赋给变量第一的:

bdd.it("Test rejection", function() { 
    return q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).should.be.rejectedWith(Error); 
}); 
+0

好,但这样如何检查几个条件一样拒绝与代码等于31的抽样误差? – Troopers

+0

@Troopers我不确定,但我认为你可以做'return q.promise(.....)。catch(function(error){/ *对错误执行普通的断言* /});'' – JLRishe