首页 > 解决方案 > 如果参数匹配(如存根路由),如何让存根返回特定存根?

问题描述

所以我的代码基本上是这样的:

var myStub = sinon.stub();
myStub.withArgs(sinon.match.has("key":"value")).returns({status: "OK!"});

我想在这样的存根中使用它:

stub.WithArgs(sinon.match.has("name","Configuration)).returns(myStub(params))

只有当有一个名为“name”的属性值为“Configuration”时,传递给我的存根的参数实际上才会传递给我的 getConfig 调用。

它被称为这样的地方:

myFunction(
{
   name: "Configuration,
   params: {
      key: "value"
   }
}

有道理?对此,Sinon 的正确做法是什么?

提前致谢!

标签: sinon

解决方案


您可以使用callsFake

stub.withArgs(sinon.match.has("name", "Configuration")).callsFake((arg) => myStub(arg.params));

这是一个完整的工作Jest测试:

import * as sinon from 'sinon';

test('call stub from stub', () => {
  var myStub = sinon.stub();
  myStub.withArgs(sinon.match.has("key", "value")).returns({ status: "OK!" });

  const stub = sinon.stub();
  stub.withArgs(sinon.match.has("name", "Configuration")).callsFake((arg) => myStub(arg.params));

  const response = stub({
    name: "Configuration",
    params: {
      key: "value"
    }
  });

  expect(response).toEqual({ status: "OK!" });  // SUCCESS
});

推荐阅读