2015-09-09 31 views
0

我試圖存根一個pouchDB'放'功能,但在一個調用函數,但它是失敗的。與Sinon失敗樁PouchDB

我的數據庫功能 -

var PouchDB = require('pouchDB') 
var PendingDB = new PouchDB("") 
module.exports.addPendingRequest = function(doc, callback){ 

    PendingDB.put(doc, function(err, result){ 
     if(err) { 
      console.log("Error in PendingDB: addPendingRequest"); 
      console.log(err); 
      callback(err, null); 
     } 
     callback(null, result); 
    }); 
console.log("after put: inside addPendingRequest"); 
} 

我的測試功能:

var expect = require("chai").expect; 
var PendingDB = require("../../lib/administration/PendingDB"); 
var PouchDB = require('pouchDB'); 
var sinon = require('sinon'); 

describe('Testing adding a request', function(){ 
    it('should save the request with email', function(done){ 
     var req = { 
       _id : "[email protected]", 
       first_name: "firstTest", 
       last_name: "test", 
       id: "[email protected]", 
       justif: "Testing Purposes", 
     } 
     var res = {}; 
     var next = null; 
     console.log("after req, res, next"); 

     var testOutput = { 
     success : "success" 
     }; 

     console.log("after testOutput is set"); 

     var PendingDBTest = sinon.stub(PouchDB.prototype, 'put', function(err, result){ 
     console.log("in stub addReq"); 
    }); 
     console.log("after sinon.stub"); 
     expect(function(){ 
      PendingDB.addPendingRequest(req, function(err, response){ 
       console.log("response"); 
       console.log(response); 
      }); 
     }).to.not.throw(Error); 

     expect(PendingDBTest.called).to.equal(true); 

     PendingDBTest.restore(); 

     done(); 

    }) 
}) 

控制檯: 後REQ,資源,testOutput後年 是sinon.stub 後置 放後:裏面addPendingRequest

因此,PendingDB.put永遠不會輸入,而且我的測試PendingDBTest。稱爲返回錯誤,從而失敗。

回答

0

存在於實際對象上,而不是其原型。

var PendingDBTest = sinon.stub(PouchDB, 'put', function(err, result){ 
      ... 
+0

但是然後我必須對它做一個新的實例。以及**函數(錯誤,結果)**的重要性。它是否必須與put標題相同? – Badi8beach

0

相反磕碰,你可以用編寫測試的內存適配器avaliable對PouchDB:

http://pouchdb.com/adapters.html

在的NodeJS:

var PouchDB = require('pouchdb'); 

var testDB = new PouchDB('testDb', { 
    db: require('memdown') 
}); 

或瀏覽器:

<script src="pouchdb.js"></script> 
<script src="pouchdb.memory.js"></script> 
<script> 
    // this pouch is ephemeral; it only exists in memory 
    var testDB = new PouchDB('testDB', { 
     adapter: 'memory' 
    }); 
</script> 

以這種方式測試的項目的例子結賬:https://github.com/hoodiehq/pouchdb-hoodie-api/tree/master/tests