摩卡测试承诺,抓住异常案例

时间:2016-02-05 16:18:39

标签: typescript mocha

我有一个测试:

it('should not save a user if it already exists', ()=>{
    var user : User = {userName : 'jack', name : 'Lenon'};
    var user1 : User = {userName : 'jack', name : 'Linon'};
    return repository.saveUser(user)
    .then((user:User)=>{
        return repository.saveUser(user1)
    }).then((user : User)=>{
          expect('Second ').equals('');
        })
        .catch((err) =>{
            expect(err).equals("A user by that username already exist in the database");
        });
});

这个想法是测试存储库拒绝以相同名称保存第二个用户。这是有效的,但我对“当时”强制失败的方式感到不满意。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

假设您正在使用Chai。

然后expect('Second ').equals('');可以成为expect.fail();

https://www.chaijs.com/api/bdd/#method_fail

答案 1 :(得分:0)

如果您试图断言诺言已被拒绝,则可以利用then的第二个回调函数。如果调用了成功回调,则应该throw(),因为测试应该失败。然后,在第二个回调中(如果promise拒绝)应触发,您可以声明错误值。像这样:

return repository.saveUser(user)
.then((user:User)=> repository.saveUser(user1))
.then((user : User)=> {
            // test will fail if promise resolves
            throw new Error("Promise should not be fulfilled when user already exists")
       },
       err => {
            // test will pass if promise rejects 
            // and the expectation is met
            expect(err).equals("A user by that username already exist in the database");      
       }
)