在开发环境,我们通常使用ts-node来直接运行typescript,在这个过程中有一些坑:
1 typescript中的paths
为了简化模块的引用,我们通常在tsconfig中配置路径,
image.png
然而,当我们配置好引用路径后,通过ts-node运行代码时会报找不到此模块的错误,此时就需要安装另一个包:ts-config-paths
image.png
然后在npm 运行命令中添加配置:-r tsconfig-paths/register
image.png
如果是通过Code Runner来执行的,那也需要修改配置:
image.png
在code-runner.executorMap中找到typescript,添加配置如下:
image.png
2 mocha测试回调方法
我们在开发过程中,常常会用到回调方法callback,而通过mocha要对这类方法进行测试,通常需要调用[done]方法,或者返回一个promise。
context('should receive single message test', function () {
it('use `done` for testing', function (done) {
const testTopic = "publisherTest_1"
const testMessage = "order-1"
const assertionSpy = sinon.spy();
consumer.subscribe(testTopic, testMessage, (topic: string, partion: number, message: string | undefined) => {
console.log("receive topic: [%s], message: [%s]", topic, message)
assertionSpy(topic, message)
})
publisher.publish(testTopic, testMessage).then(() => {
console.log("sent topic: [%s], message: [%s]", testTopic, testMessage)
})
setTimeout(function () {
expect(assertionSpy.callCount).to.equal(1)
expect(assertionSpy.args[0][0]).to.equal(testTopic)
expect(assertionSpy.args[0][1]).to.equal(testMessage)
done()
}, 100);
});
})
以上示例是对一个消息中间件进行测试的代码,步骤如下:
- 首先在it声明中增加一个done的参数
- 引入sinon模块
- 在consumer.subscribe的回调方法中,调用assertionSpy,以便于后面的断言,
- 在最后设置一个setTimeout方法,确保断言在回调方法后执行
- 在setTimeout方法中执行断言,完成后执行done()方法
网友评论