簡體   English   中英

如何在我的路由中使用 sinon 存根內部 function

[英]How can I stub an internal function in my route with sinon

我有我的內部 function

//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 function。 我在這里錯過了什么嗎? I already tried to put the export in front of the function header like this: export async function _secretString(param: string): Promise<string> instead of doing the export default {...} but that didn't help.

您可以使用將 package重新連接到存根_secretString function。 例如

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');
  });
});

帶有覆蓋率報告的單元測試結果:

fake secret
    ✓ should pass (1383ms)


  1 passing (1s)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |      75 |      100 |      50 |      75 |                   
 index.ts |      75 |      100 |      50 |      75 | 2                 
----------|---------|----------|---------|---------|-------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM