我怎样才能拒绝接受测试?

时间:2016-04-25 10:57:23

标签: javascript unit-testing promise

我设置了db.js来进行所有数据库调用。这是查询数据库的其中一个函数的示例。

db.getUserCount = function () {
return new Promise (function (resolve, reject) {
    db.users.count().then(function (result) {
        resolve (result);
    }, function(e) {
        reject (e);
    });
});

};

我是JavaScript和测试的新手。我用mocha和chai测试它是否解析了这个:

describe('getUserCount', function() {
    it('should be fulfilled when called', function() {
        return db.getUserCount().should.be.fulfilled; 
    });
});

如何测试承诺的拒绝部分。我是否必须使用像sinon这样的东西,或者是否有一些简单的方法可以使承诺失败?

2 个答案:

答案 0 :(得分:0)

通过在数据库条目或api中进行一些更改来使db.users.count()调用失败。

答案 1 :(得分:0)

我最终使用了sinon存根,所以其他测试仍然会通过。

describe('db.getUserCount rejection test', function() {
    sinon.stub(db, 'getUserCount').returns(Q.reject(new Error(errorMessage)));

    it('should be rejected when called', function() {
        return db.getUserCount().should.be.rejected;    
    });

    it.only('getUserCount responds with correct error message', function() {
        return db.getUserCount().catch(function(err) {
            expect(err.message).to.equal('Error could not connect to database');
        });

    });
});