Javascript 如何增加基本Typescript示例上Mocha测试的代码覆盖率?
我想更好地理解如何使用mocha在Typescript中测试这些函数。即,我有以下小文件:Javascript 如何增加基本Typescript示例上Mocha测试的代码覆盖率?,javascript,node.js,typescript,mocha.js,Javascript,Node.js,Typescript,Mocha.js,我想更好地理解如何使用mocha在Typescript中测试这些函数。即,我有以下小文件: import { Request, Response } from 'express'; export const ping = (req: Request, res: Response) => { res.send('pong'); }; export const health = (req: Request, res: Response) => { res.send('
import { Request, Response } from 'express';
export const ping = (req: Request, res: Response) => {
res.send('pong');
};
export const health = (req: Request, res: Response) => {
res.send('OK');
};
这个练习可能很简单,因为这里没有太多的测试,但下面我有一些基本的摩卡测试:
describe('Health Tests', () => {
it('Check ping', () => {
expect(ping).to.not.be.null;
})
it('Check health', () => {
expect(health).to.not.be.null;
})
})
当我在这个测试上运行代码覆盖率时,我得到:50%Stmts | 100%Branch | 0%Funcs | 50%行。特别是因为这是一段非常小的代码,如果可能的话,我希望对所有类别都有100%的覆盖率。有人对如何做到这一点有什么建议吗?另外,有人能解释一下为什么我的功能覆盖率为0%吗?通过检查ping
或health
,我是否也调用了一个函数,从而也测试了该函数
任何建议都将不胜感激 您需要使用类似的模拟/存根库。以下是100%覆盖率的单元测试解决方案:
index.ts
:
从“express”导入{Request,Response};
导出常量ping=(请求:请求,回复:响应)=>{
res.send(“pong”);
};
导出常量运行状况=(请求:请求,回复:响应)=>{
res.send('OK');
};
index.test.ts
:
从“/”导入{ping,health};
从“sinon”进口sinon;
描述('63065938',()=>{
描述(#ping,()=>{
它('应该通过',()=>{
常量mReq={};
const mRes={send:sinon.stub()};
ping(mReq、mRes,如有);
sinon.assert.calledWith(mRes.send,'pong');
});
});
描述(#健康,()=>{
它('应该通过',()=>{
常量mReq={};
const mRes={send:sinon.stub()};
健康(mReq、mRes,如有);
sinon.assert.calledWith(mRes.send,'OK');
});
});
});
100%覆盖率的单元测试结果:
63065938
#平
✓ 应该通过
#健康
✓ 应该通过
2次通过(12毫秒)
----------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
您需要使用类似的模拟/存根库。以下是100%覆盖率的单元测试解决方案:
index.ts
:
从“express”导入{Request,Response};
导出常量ping=(请求:请求,回复:响应)=>{
res.send(“pong”);
};
导出常量运行状况=(请求:请求,回复:响应)=>{
res.send('OK');
};
index.test.ts
:
从“/”导入{ping,health};
从“sinon”进口sinon;
描述('63065938',()=>{
描述(#ping,()=>{
它('应该通过',()=>{
常量mReq={};
const mRes={send:sinon.stub()};
ping(mReq、mRes,如有);
sinon.assert.calledWith(mRes.send,'pong');
});
});
描述(#健康,()=>{
它('应该通过',()=>{
常量mReq={};
const mRes={send:sinon.stub()};
健康(mReq、mRes,如有);
sinon.assert.calledWith(mRes.send,'OK');
});
});
});
100%覆盖率的单元测试结果:
63065938
#平
✓ 应该通过
#健康
✓ 应该通过
2次通过(12毫秒)
----------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
我认为您缺少的是测试调用这些函数的结果。这些测试只是检查函数(保存函数引用的变量)是否存在,而不是它的执行和实际结果当函数的结果是res.send()时,我如何在mocha测试中访问该结果?这些函数不返回任何内容(从技术上讲,它们返回未定义的)。测试一个基于参数返回值的函数总是比较容易的,因此以这种方式编写尽可能多的函数以获得最大的可测试性。您不能总是这样做,但是在这种情况下,您仍然需要调用它们,并且您的断言需要针对它们的副作用执行,也就是说它们如何影响res
。我认为您缺少的是测试调用这些函数的结果。这些测试只是检查函数(保存函数引用的变量)是否存在,而不是它的执行和实际结果当函数的结果是res.send()时,我如何在mocha测试中访问该结果?这些函数不返回任何内容(从技术上讲,它们返回未定义的)。测试一个基于参数返回值的函数总是比较容易的,因此以这种方式编写尽可能多的函数以获得最大的可测试性。您不能总是这样做,但是在这种情况下,您仍然需要调用它们,并且您的断言需要针对它们的副作用执行,也就是说它们如何影响res
。