gpt4 book ai didi

javascript - 理解Sinon.js的yield()、yields()和callsArg()

转载 作者:行者123 更新时间:2023-12-02 22:49:33 30 4
gpt4 key购买 nike

有什么区别

  • stub.yield([arg1, arg2, ...])
  • spy.yields([arg1, arg2, ...])
  • stub.callsArg(index)

Sinon.js stub 库?

stub.yield()是我唯一能够掌握的:

  stub = sinon.stub(API, 'call_remote');
callback = sinon.spy();
API.call_remote('help', callback);
@stub.yield( "solution!" );
@stub.calledOnce.should.be.true;
@callback.calledOnce.should.be.true;
@callback.args[0][0].should.eql( "solution!" );

使用 should.js 进行测试,所有断言都会通过。

stub.yields() 是否有类似的测试模式和stub.callsArg(index)

文档没有提供任何示例来阐明其他两种方法,但我对它们很好奇。

最佳答案

我相信文档中概述的方法如下:

  • spy.yield
  • stub .yields
  • stub.callsArg

yieldscallsArg 之间的主要区别可以在 sinon 的 yield 文档中找到:

If a method accepts more than one callback, you need to use callsArg to have the stub invoke other callbacks than the first one.

yields 将调用它遇到的第一个函数参数以及您提供给它的任何可选参数。 callsArg 将尝试调用该调用的 arguments 对象中给定索引处的函数参数,并且不会向其传递任何参数(您可以使用 callArgWith 来实现该行为)。

spy.yieldstub.yields 非常相似,除了它是 spy API 的一部分并且它调用传递给它的所有回调。

以下是一些展示差异的示例(如果示例有点做作,请原谅我):

产量:

var fn = sinon.expectation.create().withArgs(1, 2);
var stub = sinon.stub().yields(1, 2);
stub(fn);
fn.verify();

调用参数:

var f1 = sinon.expectation.create().never();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().callsArg(1);
stub(f1, f2);
f1.verify();
f2.verify();

产量:

var f1 = sinon.expectation.create().once();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().yield();
stub(f1, f2);
f1.verify();
f2.verify();

关于javascript - 理解Sinon.js的yield()、yields()和callsArg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003218/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com