2017-07-29 90 views
0

我正在学习摩卡和柴。 以为我在数据库连接测试中保持简单。在Mocha测试MySQL连接

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

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

回答

1

的问题是,测试是异步的,要传递到摩卡功能不包括回调。

如果您通过它接受一个回调函数的功能,摩卡将传递一个回调,你可以调用通知摩卡的测试完成:

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不带参数的通知摩卡的测试完成。

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

+0

很酷。完成的回调让我们的摩卡知道测试已经完成。 事实证明,这种特殊的测试返回对象OkPacket { 段计数:0, affectedRows:0, insertId:0, serverStatus:2, WARNINGCOUNT:0, 消息: '', protocol41:真, changedRows:0} 所以我认为我在另一个级别上做了错误的测试。 –

+0

您需要调整答案中的期望以适应实际收到的内容。代码中有一个名为'result'的变量以及一个名为'result'的参数,所以不清楚是什么。但是你的核心问题是缺乏回调。如果你评论期望值 - 或者用更能反映收到的东西来代替 - 你应该通过测试。 – cartant

+0

@cartant在测试用例中测试数据库连接很重要吗? –