【问题标题】:Stubbing PouchDB with Sinon failing使用 Sinon 存根 PouchDB 失败
【发布时间】:2015-09-09 19:17:38
【问题描述】:

我试图存根 pouchDB 'put' 函数,但在调用函数中但它失败了。

我的数据库功能-

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 : "test@email.com",
                first_name: "firstTest",
                last_name: "test",
                id: "test@email.com",
                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();

    })
 })

控制台: 在请求、资源、下一个之后 设置 testOutput 后 在 sinon.stub 之后 放置后:addPendingRequest 内

因此永远不会输入 PendingDB.put 并且我的测试 PendingDBTest.call 返回 false,因此失败。

【问题讨论】:

    标签: javascript sinon pouchdb sinon-chai


    【解决方案1】:

    在实际对象上存根,而不是在其原型上。

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

    【讨论】:

    • 但我必须正确创建一个新实例。 function(err, result) 的重要性是什么?它必须与put header相同吗?
    【解决方案2】:

    您可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 2014-11-29
      • 2020-12-12
      • 1970-01-01
      • 2015-11-28
      • 2021-07-26
      • 2019-12-04
      • 1970-01-01
      相关资源
      最近更新 更多