我是编写单元测试的新手,我正在努力学习Mocha和Chai。在我的Node+express项目中,我创建了一个单元测试,如下所示:
import { expect } from 'chai';
var EventSource = require('eventsource');
describe('Connection tests', () => { // the tests container
it('checks for connection', () => { // the single test
var source = new EventSource('http://localhost:3000/api/v1/prenotazione?subscribe=300');
source.onmessage = function(e: any) {
expect(false).to.equal(true);
};
});
});
当测试执行时,http://localhost:3000/api/v1/prenotazione?subscribe=300
Web服务是活动的,我可以看到Mocha确实调用了它,因为我的Web服务记录了传入的请求。该Web服务使用the SSE protocol,它从不关闭连接,但它不时地通过同一连接发送数据。EventSource是实现SSE协议的客户机类,并且当您在其中设置onmessage
回调时,它将连接到服务器。然而,Mocha并不等待Web服务返回,测试将传递我写入expect
函数调用的任何内容。例如,只调试测试代码本身,我甚至写了expect(false).to.equal(true);
,这显然不可能是真的。然而,当我运行测试时,我得到了以下结果:
$ npm run test
> crud@1.0.0 test
> mocha -r ts-node/register test/**/*.ts --exit
Connection tests
✔ checks for connection
1 passing (23ms)
如何让Mocha等待Web服务返回数据,然后再将测试解析为通过?
1条答案
按热度按时间zbwhf8kr1#
经过几次试验结束错误,我发现
1.当Mocha单元测试需要等待某个东西时,它们必须返回一个Promise
onmessage
处理程序,因此您必须使用替代addEventListener
函数添加事件侦听器下面是我的工作代码: