2017-02-06 4 views
2

require('promise-mysql') npmパッケージのsinonを使用してNodeJSでpromisifiedクエリを模擬することは可能ですか? Sinonが私たちにオブジェクトのメソッドをモックしたりスタブしたりすることを許可しているので。データベースの設定が正しいかどうかに関係なく、有効なオブジェクトを返すようにcreateConnection()メソッドをオーバーライドしたいとします。私はそのメソッドをスタブします。私はコールバックを持っているrequire('mysql') npmパッケージを使ってそれを嘲笑することができます。単体テストのためにsinonを使用してpromisified Mysqlデータを模擬する方法

しかし、require('promise-mysql')パッケージが約束を返すように、私は同じようにテストデータを模擬する方法についてはわかりません。これはどのように我々はリターンがあなたのnodejsバージョン場合

var successConnectionObject = { 
     connect: function() { 
      return Promise.resolve() 
     }, 
     query: function(sqlQury) { 
      if (sqlQury === 'SELECT * FROM USERS') { 
       return Promise.resolve(constants.USERQueryResp); 
      } else { 
       return Promise.resolve(';') 
      } 
     }, 
     end: {function() {} 
} 

値としてあなたがPromise.resolvePromise.rejectを使用することができますrequire('promise-mysql');

答えて

0

を使用して、これを同じ達成することができ、完全

var successConnectionObject = { 
     connect: function(cb) { 
      cb(); 
     }, 
     query: function(sqlQury, cb) { 
      if (sqlQury === 'SELECT * FROM USERS') { 
       cb(null, constants.USERQueryResp); 
      } else { 
       cb(null, ''); 
      } 
     }, 
     end: function() {} 
} 

var testMysqlDriver = require('mysql'); 
var stub = sinon.stub(testMysqlDriver, 'createConnection'); 
stub.returns(successConnectionObject); 

publish.handler(some_JSON_Request, some_Context_Values, function(err, data) { 
    expect(data.message).toBe(USER_Query_Response); 
    done(); 
}); 

を働いているrequire('mysql')パッケージの場合

Promise、yoを持っていないbluebird、または他のPromiseライブラリを使用できます。

var Promise=require('bluebird') 
関連する問題