2016-04-25 78 views
0

我有一個db.js設置來完成我所有的數據庫調用。這是查詢數據庫的函數之一。我如何做出承諾拒絕測試?

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

};

我對JavaScript和測試很新穎。我用摩卡和柴來測試它是如何解決的:

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

我該如何測試承諾的拒收部分。我是否必須使用像sinon這樣的東西,還是有一些簡單的方法來使諾言失敗?

+0

這是一個奇怪的術語,理解,拒絕詞,但我假設你想測試例外或錯誤。 測試正在測試某些條件,這取決於錯誤條件或異常情況,修改您的摩卡測試。 – user2347763

+0

避免['Promise' constructor antipattern](http://stackoverflow.com/q/23803743/1048572)(在'getUserCount'中)! – Bergi

+0

我該如何去做。我應該不使用構造函數嗎?這是我知道如何作出承諾的唯一方法 – nasoj1100

回答

0

我結束了使用興農存根所以其他的測試仍然會通過。

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'); 
     }); 

    }); 
});  
0

db.users.count()通過電話或者失敗將導致數據庫條目或在您的API的一些變化。

+0

當它履行失敗時,這不會使我的測試,然後 – nasoj1100

+0

是的。您應該有2個單獨的測試來測試成功和失敗路徑 –