Node.js 什么';使用Mocha对事件处理程序进行单元测试的正确方法是什么?
我有一个函数,它接受一个事件处理程序来处理接收到的消息,我想用Mocha为它编写一个单元测试Node.js 什么';使用Mocha对事件处理程序进行单元测试的正确方法是什么?,node.js,unit-testing,mocha.js,Node.js,Unit Testing,Mocha.js,我有一个函数,它接受一个事件处理程序来处理接收到的消息,我想用Mocha为它编写一个单元测试 chat.setupBroadcastChannel = async (a, b, callback) => { // do something return await otherFunction(..) } chat.sendBroadcastMessage= async (a, b) => { // do something
chat.setupBroadcastChannel = async (a, b, callback) => {
// do something
return await otherFunction(..)
}
chat.sendBroadcastMessage= async (a, b) => {
// do something
return await sendMessage(..)
}
我的测试如下所示:
it('should setup a broadcast channel and send and receive a broadcast message', () => {
const testMessage = 'Hello!'
let expectedMessage = '{d"sender":"self","message":"Hello!"}'
let receivedMessage
return chat.setupBroadcastChannel(broadcastTopic, false, (topic, partition, message) => {
receivedMessage = message.value.toString()
console.log('Test: Received a broadcast message', receivedMessage)
console.log(receivedMessage, expectedMessage)
assert.equal(receivedMessage, expectedMessage)
})
.then(async () => {
await chat.sendBroadcastMessage('self', testMessage)
})
})
当receivedMessage
与expectedMessage
不匹配时,测试不起作用。看起来失败的断言是由Kafka(我正在使用的消息传递层)而不是Mocha接收的
{"level":"ERROR","timestamp":"2021-05-22T14:58:14.247Z","logger":"kafkajs","message":"[Runner] Error when calling
eachMessage","topic":"broadcast","partition":0,"offset":"138","stack":"AssertionError [ERR_ASSERTION]:
'{\"sender\":\"self\",\"message\":\"Hello!\"}' == '{d\"sender\":\"self\",\"message\":\"Hello!\"}'\n
at D:\\path\\test\\chat.js:21:20\n at Runner.eachMessage (D:\\path\\backend\\kafka.js:44:17)\n
at Runner.processEachMessage (D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:151:20)\n
at onBatch (D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:287:20)\n
at D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:339:21\n
at invoke (D:\\path\\node_modules\\kafkajs\\src\\utils\\concurrency.js:38:5)\n
at push (D:\\path\\node_modules\\kafkajs\\src\\utils\\concurrency.js:51:7)\n
at D:\\path\\node_modules\\kafkajs\\src\\utils\\concurrency.js:60:53\n
at new Promise (<anonymous>)\n
at D:\\path\\node_modules\\kafkajs\\src\\utils\\concurrency.js:60:20\n
at D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:329:11\n
at Array.map (<anonymous>)\n
at D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:328:17\n
at processTicksAndRejections (internal/process/task_queues.js:93:5)\n
at async Promise.all (index 0)\n
at async Runner.fetch (D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:354:5)\n
at async D:\\path\\node_modules\\kafkajs\\src\\consumer\\runner.js:383:9",
"error":{"generatedMessage":true,"code":"ERR_ASSERTION",
"actual":"{\"sender\":\"self\",\"message\":\"Hello!\"}",
"expected":"{d\"sender\":\"self\",\"message\":\"Hello!\"}","operator":"=="}}
{“level”:“ERROR”,“timestamp”:“2021-05-22T14:58:14.247Z”,“logger”:“kafkajs”,“message”:“[Runner]调用时出错”
每个消息”,“主题”:“广播”,“分区”:0,“偏移量”:“138”,“堆栈”:“断言错误”[ERR_ASSERTION]:
“{\'sender\':\'self\',\'message\':\'Hello!\'}'='{d\'sender\':\'self\',\'message\':\'Hello!\'}'\n
在Runner.eachMessage的D:\\path\\test\\chat.js:21:20\n处(D:\\path\\backend\\kafka.js:44:17)\n
在Runner.processEachMessage(D:\\path\\node\u modules\\kafkajs\\src\\consumer\\Runner.js:151:20)处\n
在onBatch(D:\\path\\node\u modules\\kafkajs\\src\\consumer\\runner.js:287:20)\n
在D:\\path\\node\u modules\\kafkajs\\src\\consumer\\runner.js:339:21\n
在调用时(D:\\path\\node\u modules\\kafkajs\\src\\utils\\concurrency.js:38:5)\n
推送时(D:\\path\\node\u modules\\kafkajs\\src\\utils\\concurrency.js:51:7)\n
在D:\\path\\node\u modules\\kafkajs\\src\\utils\\concurrency.js:60:53\n
在新的承诺下()\n
在D:\\path\\node\u modules\\kafkajs\\src\\utils\\concurrency.js:60:20\n
位于D:\\path\\node\u modules\\kafkajs\\src\\consumer\\runner.js:329:11\n
位于Array.map()\n
在D:\\path\\node\u modules\\kafkajs\\src\\consumer\\runner.js:328:17\n
在处理和拒绝时(内部/process/task\u queues.js:93:5)\n
在async Promise.all(索引0)上\n
在async Runner.fetch(D:\\path\\node\u modules\\kafkajs\\src\\consumer\\Runner.js:354:5)\n
在异步D:\\path\\node\u modules\\kafkajs\\src\\consumer\\runner.js:383:9“,
“error”:{“generatedMessage”:true,“code”:“ERR_断言”,
“实际”:“{\”发送者\“:\”自我\“,\”消息\“:\”你好!\“}”,
“应为“{d\”发件人\“:\”自我\“,\”消息\“:\”你好!\“}”,“操作员”:“==”}”
设置此测试的正确方法是什么