代码之家  ›  专栏  ›  技术社区  ›  Avius

Sinon存根和EXACTARGS?

  •  1
  • Avius  · 技术社区  · 6 年前

    现在他们似乎是这样工作的:

    const methodStub = stub();
    methodStub.withArgs().returns(1);
    console.log(methodStub()); // prints 1
    console.log(methodStub({})); // also prints 1
    

    准确的 参数匹配。我已经研究过向sinon添加一个定制行为,但没有成功。我真的不知道下一步该怎么做。

    我知道我可以在打电话后检查这些论点,但我觉得这样写的测试的干净性不起作用。

    而且,这篇颇受欢迎的帖子对我也是如此 非常 困惑的: Can sinon stub withArgs match some but not all arguments

    如果我使用method.get.withArgs(25).calls。。。那么它也不匹配,因为withArgs()匹配

    我似乎观察到了与Sinon v6完全相反的情况,正是OP想要的行为。。。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Brian Adams    6 年前

    链接问题的这种说法是不正确的:

    withArgs() 比赛 全部的 论据

    withArgs 没有 匹配所有参数。我添加了一个 answer 有细节。


    withExactArgs 为了一个 stub has been discussed but never implemented .


    callsFake 使用自定义函数、添加自定义行为或使用 mock 而不是 树桩 当前选项是否在 sinon 用于断言方法是用精确的参数调用的。


    1 如果调用时没有参数,则可以使用 :

    test('stub exact args', () => {
      const stub = sinon.stub();
      stub.callsFake((...args) => {
        if (args.length === 0) {
          return 1;
        }
        return 'default response';
      });
    
      expect(stub()).toBe(1);  // SUCCESS
      expect(stub({})).toBe('default response');  // SUCCESS
    });