2015-06-01 97 views
0

isConnected應該是一個變量,用於測試數據庫連接是否成功。現在在我的DatabaseTest類中,我想聲明這個isConnected變量。 isConnected在數據庫對象中聲明,所以它應該可以通過database.isConnected訪問。但是,在makeConnection()和closeConnection()中值不會改變。我懷疑這是由於isConnected不是全局變量。另外,當我將它聲明爲僅在var mysql行後面的var isConnected時,它也不會更新它。 我是否缺少一些基本範圍基礎知識?變量isConnected未更改

var mysql = require('mysql'); 

//Database 
var database = { 

isConnected: false, 

makeConnection: function(){ 

    var connectionString = { 
     host: '192.168.1.3', 
     port: 3306, 
     user: 'root', 
     password: 'secret', 
     database: 'user_profile_database' 
    }; 

    var activeConnection = mysql.createConnection(connectionString); 
    activeConnection.connect(function(error){ 
      if(error){ 
       throw error; 
      } 
      console.log("Successfull connection!"); 
     }); 
     isConnected = true; 
    return activeConnection; 
}, 

closeConnection: function(activeConnection){ 
    activeConnection.end(function(error){ 
     if(error){ 
      throw error; 
     } 
     console.log("Successfull disconnetion!"); 
    }); 
    isConnected = false; 
    } 
} 

module.exports = database; 

所以這是測試用例:

var database = require('../Code/Database/Database'); 
var expect = require('chai').expect; 

//Tests for the Database class. 
describe("#Database", function(){ 

//Test for the makeConnection method 
describe("#makeConnection", function(){ 

    it("should make a connection with the database", function(){ 
     expect(database.isConnected).to.be.false; 
     var connection = database.makeConnection(); 
     expect(database.isConnected).to.be.true; 
    }) 
    }) 
}) 
+2

'isConnected'是你對象的屬性。您必須通過對該對象的引用來引用該屬性。 – Pointy

回答

0

在您makeConnetion()closeConnection()方法,你應該參考isConnectedthis.isConnected

例如:

var mysql = require('mysql'); 

//Database 
var database = { 

isConnected: false, 

makeConnection: function(){ 

    var connectionString = { 
     host: '192.168.1.3', 
     port: 3306, 
     user: 'root', 
     password: 'secret', 
     database: 'user_profile_database' 
    }; 

    var activeConnection = mysql.createConnection(connectionString); 
    activeConnection.connect(function(error){ 
      if(error){ 
       throw error; 
      } 
      console.log("Successfull connection!"); 
     }); 
     this.isConnected = true; // instead of just isConnected 
    return activeConnection; 
}, 

closeConnection: function(activeConnection){ 
    activeConnection.end(function(error){ 
     if(error){ 
      throw error; 
     } 
     console.log("Successfull disconnetion!"); 
    }); 
    this.isConnected = false; // instead of just isConnected 
    } 
} 

module.exports = database; 
+0

我是如何忽略它的?我記得嘗試this.property,但也可能有其他錯誤。非常感謝! – Nils

+0

我的榮幸! :-) – JME