我有内部功能
//in greatRoute.ts
async function _secretString(param: string): Promise<string> {
...
}
router
.route('/foo/bar/:secret')
.get(
async (...) => {
...
const secret = _secretString(res.params.secret);
...
},
);
export default {
...
_secretString
};
现在我正尝试使用sinon.stub
模拟呼叫:
sinon.stub(greatRoute, '_secretString').resolves('abc');
但是,这并不符合我想要的方式。当我在测试中调用路由时,它仍会进入_secretString
函数。我在这里想念什么吗?我已经尝试将导出文件放在函数标头的前面,如下所示:
export async function _secretString(param: string): Promise<string>
而不是进行export default {...}
,但这没有帮助。
答案 0 :(得分:0)
您可以使用rewire软件包对 app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "MyArea",
pattern: "C:/WebApplication7/MS/{area:exists}/Views/{controller=Home}/{action=Index}.cshtml");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapBlazorHub();
});
函数进行存根。例如
_secretString
:
index.ts
async function _secretString(param: string): Promise<string> {
return 'real secret';
}
async function route(req, res) {
const secret = await _secretString(req.params.secret);
console.log(secret);
}
export default {
_secretString,
route,
};
:
index.test.ts
具有覆盖率报告的单元测试结果:
import sinon from 'sinon';
import rewire from 'rewire';
describe('61274112', () => {
it('should pass', async () => {
const greatRoute = rewire('./');
const secretStringStub = sinon.stub().resolves('fake secret');
greatRoute.__set__('_secretString', secretStringStub);
const logSpy = sinon.spy(console, 'log');
const mReq = { params: { secret: '123' } };
const mRes = {};
await greatRoute.default.route(mReq, mRes);
sinon.assert.calledWithExactly(logSpy, 'fake secret');
sinon.assert.calledWith(secretStringStub, '123');
});
});