簡體   English   中英

如何使用sinon模擬承諾的Mysql數據進行單元測試

[英]How to mock promisified Mysql data using sinon for Unit Testing

是否可以使用sinon的require('promise-mysql') npm軟件包在NodeJS中模擬承諾的查詢。 正如Sinon允許我們在對象上模擬和/或存根方法。 假設我想重寫createConnection()方法,以便無論數據庫設置是否正確,它都將返回一個有效的對象,我會將該方法存根。 我能夠使用具有回調的require('mysql') npm軟件包來模擬它。

但是,隨着require('promise-mysql')包返回promise,我不確定如何模擬測試數據。

對於require('mysql')包,它運行良好

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('promise-mysql');實現相同的功能require('promise-mysql');

您可以使用Promise.resolvePromise.reject作為返回值

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() {} 
}

如果您的nodejs版本沒有Promise ,則可以使用bluebird或任何其他Promise庫

var Promise=require('bluebird')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM