我正在学习 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.");
});
最佳答案
问题在于测试是异步的,并且您传递给 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/