2017-03-22 30 views
3

我想在SQL Server上執行一個簡單的查詢,但是當我用量角器運行它時,它只是快速運行並且不會返回(記錄)任何內容。我將不勝感激任何提示,工作示例或指向我做錯了什麼,以及如何使用量角器在SQL Server上執行SQL查詢。量角器查詢SQL Server數據庫(MSSQL)

var sql = require('mssql'); 

describe('test db connection', function() { 

    it('tests db connection', function() { 

    ConnectDB() 

    }) 

    function ConnectDB() { 

    var config = { 
     user: 'user', 
     password: 'password', 
     server: 'xyz.database.windows.net', 
     database: 'dbdev', 

     options: { 
     encrypt: true 
     } 
    } 

    var connection = new sql.Connection(config) 
    connection.connect(function (err) { 
     console.log(err) 
    }) 

    var request = new sql.Request(connection); 
    request.query('select * from Config where [Key] like \'HidePreop%\'', function (err, recordeset) { 
     var res = recordeset; 
     console.log(res) 
    }); 

回答

3

量角器測試 - it塊僅會等待在量角器控制流的webDriverJS命令完成,您有任何其它異步活動使用doneit塊等待手動進行。

在這種情況下 -

describe('test db connection', function() {  
    it('tests db connection', function (done) { 
     // Any method that returns a promise. Similary if your method returns a callback you can handle accordingly 
     ConnectDB().then(function _onSuccess(){ 
      done(); 
     }).catch(function _onFailure(err){ 
      done.fail(err); 
     }) 
    }) 
}); 

而且我會修改你的funcion - ConnectDB()返回基於回調的分辨率由mssql npm package提供的承諾。 Refer here關於如何將回調轉換爲承諾。它是一個非常棒的教程。

function ConnectDB() { 
    return new Promise(function (fulfill, reject) { 
     var config = { 
      user: 'user', 
      ............. 
     }; 
     var connection = new sql.Connection(config); 
     connection.connect(function (err) { 
      reject(err); 
     }); 

     var request = new sql.Request(connection); 
     request.query('select * from Config where [Key] like \'HidePreop%\'', function (err, recordeset) { 
      if (err) reject(err); 
      else fulfill(recordeset); 
     }); 
    }); 
} 
+0

感謝@AdityaReddy我會檢查出來 – rafalf

1

我訪問使用此配置MSSQL數據庫在它自己的文件,然後導入到測試文件,所以我可以用它有點像一個假冒的頁面對象。 我強烈建議將任何數據庫信息存儲在存儲庫外部的外部文件中。我使用的是.ENV從該文件可以使用npm install --save-dev dotenv

//db.js 
const sql = require('mssql'); 

require('dotenv').config(); 

var config = { 
    user: process.env.MSSQL_USERNAME, 
    password: process.env.MSSQL_PASSWORD, 
    server: process.env.MSSQL_SERVER, 
    database: 'YOURDB', 
    options: { 
    encrypt: true 
    } 
}; 

module.exports = { 

/** Define sql queries here */ 
    deleteEmployeeByLastName(lastName) { 
    let my_query = `DELETE FROM dbo.Employee WHERE LastName='${lastName}'`; 
    sql.connect(config).then(function() { 
     new sql.Request() 
     .query(my_query).then(function (recordset) {}).catch(function (err) { 
      console.log(err); 
     }); 
    }); 
    } 
} 

測試文件應該是這個樣子

//test.js 
var db = require('db.js'); 

describe('Employee Management', function() {  

    it('Deleting an employee', function (done) { 
     db.deleteEmployeeByLastName('Pmurt'); 
     //REST OF CODE HERE 
     //... 
     //... 
     done(); 
    }) 
}); 
0

過帳[email protected]4.0工作示例安裝故宮圖書館dotenv。 4

var sql = require('mssql'); 

describe('test db connection', function() { 
it('tests db connection', function (done) { 
    ConnectDB().then(function _onSuccess(_returned){ 
     console.log(_returned.recordset[0].FirstPSPOrderId) 

     done(); 
    }).catch(function _onFailure(err){ 
     done.fail(err); 
    }) 
}) 

});

function ConnectDB() { 
    return new Promise(function (fulfill, reject) { 
    var config = { 
     user: 'xxx', 
     password: 'xxx', 
     server: 'xxx', 
     port: 'xxx', 
     database: 'xxxxxx', 

     options: { 
      encrypt: true 
     } 
}; 
    var connection = new sql.ConnectionPool(config); 
    connection.connect((err) => { 
     if (err) reject(err); 

    //}); 

    let query = "select [FirstPSPOrderId] from XYZ" 
    connection.request() 
    .query(query, (err, recordeset) => { 

     console.dir('Record set: ' + recordeset) 
     console.dir('Err: ' + err) 

     if (err) reject(err); 
     else fulfill(recordeset); 
    }); 
}); 

}); 

}