2015-09-09 27 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