javascript - 在 Mocha 中测试 MySQL 连接

标签 javascript node.js mocha.js chai

我正在学习 Mocha 和 Chai 。 我以为我通过数据库连接测试来保持简单。

测试一开始看起来不错,但有些东西让我看得更近。 测试成功了,那么在某些情况下它们也应该失败吧? 我想看到失败,所以我强制了一个场景

it('db.connection.connect should return a connection object using default config.js credentials ', function(){
    var result = "FAIL!";
    db.connection.connect(function(err, result) {
        if(err){
            console.log("SQL CONNECT ERROR: " + err);
            result=(err);
        } else {
            //console.log("SQL CONNECT SUCCESSFUL.");
            //result = "SQL CONNECT SUCCESSFUL.";
            console.log("Test succeeded but result should show fail");
        }
        expect(result).to.equal("SQL CONNECT SUCCESSFUL.");
    });
});

但是,现在测试不会成功。 “结果”变量永远不会按预期更改。

it('db.connection.connect should return a connection object using default config.js credentials ', function(){
    var result = "FAIL!";
    db.connection.connect(function(err, result) {
        if(err){
            console.log("SQL CONNECT ERROR: " + err);
            result=(err);
        } else {
            console.log("SQL CONNECT SUCCESSFUL.");
            result = "SQL CONNECT SUCCESSFUL.";
            //console.log("Test succeeded but result should show fail");
        }
    });
    expect(result).to.equal("SQL CONNECT SUCCESSFUL.");
});

enter image description here

最佳答案

问题在于测试是异步的,并且您传递给 Mocha 的函数不包含回调。

如果您传递一个接受回调函数的函数,Mocha 将传递一个回调,您可以调用该回调来通知 Mocha 测试已完成:

it('db.connection.connect should ...', function(done) {
    db.connection.connect(function(err, result) {
        if(err){
            done(err);
            return;
        }
        expect(result).to.equal("SQL CONNECT SUCCESSFUL.");
        done();
    });
});

不带任何参数调用 done 来通知 Mocha 测试已完成。

请注意,done 可能会传递一个错误,在这种情况下,Mocha 将无法通过测试。

关于javascript - 在 Mocha 中测试 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386281/

相关文章:

javascript - 为什么 TypedArrays 有一个值为 3 的静态长度属性

javascript - Mongoose 模型继承 : How to put an extended model in its own file?

node.js - NodeJS 部署到 AWS Beanstalk 错误

node.js - 在集合 "library"中找不到原理图 "@schematics/angular"

ecmascript-6 - mocha --compilers js :babel/register "cannot find module"

javascript - 从 firebase 进行身份验证后,我想在状态中存储名称、电子邮件

javascript - 更新的状态在方法的返回语句中没有用

javascript - 哪个 javascript 解释器最容易嵌入到 C 应用程序中?

javascript - 如何对依赖于外部库 "<script src="http ://stripe[. ..] 的 API 进行单元测试

javascript - JSDom 不加载相关脚本