2016-11-07 7 views
1

とからかっ:Sinon私はSequelizeを使用して、次のnodejs機能を持っているSequelize

var processDatabase = function (dbConnection, schema, recordsets) { 

    var myLogTable = dbConnection.define(schema.tableName, schema.myLogSchema, schema.myLogSchemaIndex); 
    myLogTable.sync({ 

     force: false, 
     freezeTableName: true, 
     logging: console.log 

    }).then(function() { 

     console.log('Table synced...'); 

     for (k = 0; k < recordsets.length; k++) { 

      var query = "Some query"; 

      dbConnection.query(
        query, { 
         type: dbConnection.QueryTypes.SELECT 
        } 
       ) 
       .then(function (results) { 
        console.log('MYSQL Selection Done'); 
       }) 
       .catch(function (err) { 
        console.log('MYSQL Error: ' + err.message); 
       }); 
     } 
    }).catch(function (err) { 
     console.log('MYSQL Sync Error: ' + err.message); 
    }); 
}; 

私はモックに新しいですし、特にキャッチ部分をテストする方法がわかりません。

これは、私が思い付くことができ、私のユニットテストですが、私は同期の呼び出しがキャッチ部へ行くことができるかわからない:

私ができるように、私は私のモックを書くだろうか
describe('when call processDatabase', function() { 

    it('should process successfully when sync fails', function (done) { 

     seqConnection.define = function (tableName, schema, schemaIndex) { 
      return mockMyLogModel; 
     }; 

     processProfilesNotMapped(seqConnection, { 
         tableName: 'SomeTable', 
         myLogSchema: myLogSchema, 
         myLogSchemaIndex: myLogSchemaIndex 
        }, []); 
     done();   
    }) 
}); 

捕まえるだけでなく、その両方をカバーすることができるようにテストしますか?

答えて

1

"同期"が約束を使用しているため、あなたのモックで例外を延期する必要があります。 qライブラリなどを使用することができます。このようにして同期機能を実行すると、キャッチセクションに移動します
qを使用した例:

関連する問題