javascript - 变量 isConnected 未更改

标签 javascript mysql scope mocha.js chai

isConnected 应该是一个变量来测试数据库连接是否成功。现在,在我的 DatabaseTest 类中,我想断言这个 isConnected 变量。 isConnected 在数据库对象中声明,因此应该可以通过database.isConnected 访问它。但在 makeConnection() 和 closeConnection() 中该值没有改变。我怀疑这是因为 isConnected 不是全局变量。另外,当我在 var mysql 行之后将其声明为 var 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;
    })
  })
})

最佳答案

makeConnetion()closeConnection() 方法中,您应该将 isConnected 引用为 this.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;

关于javascript - 变量 isConnected 未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577273/

相关文章:

php - html 表未从 MySQL 表中填充

Javascript 时间死区

javascript - 如果变量尚未传递给函数,则初始化该变量。这是正确的方法吗?

javascript - 如何使用 AngularJS 在数据库的复选框中设置默认值

javascript - 如何在没有 "restarting"进程的情况下重新加载 sails.js 应用程序?

JavaScript - 在所有创建的 li 元素上添加事件监听器

mysql - 使用正则表达式分隔符在 MySQL 中拆分字段值?

mysql - 授予与 MysQL 5.0 中的模式匹配的一组数据库的权限

javascript - 为什么变量在文档就绪标签之外显示为未定义

javascript - "^="运算符在此查找非配对数字算法中做了什么?