gpt4 book ai didi

javascript - 在 sinon 中创建一个假的 object.method() "from scratch"?

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:57 25 4
gpt4 key购买 nike

tl;博士

如何在 sinon 中“从头开始”创建 object.method()?

上下文

例如,我有一个家庭Parser每个实现 #parse(text) 的类方法并返回 ParseTree对象或返回 null .

我正在做我测试的单元测试Parser对象本身(它们在其他地方进行了测试)但我需要一个响应 #parse() 的可测试对象.我可以实例化并 stub 一个真正的解析器,但这会将不必要的代码拖到这部分测试中。

问题

我很确定这很容易使用 sinon 的 spy()、stub() 和/或 mock() api,所以:我如何创建一个可测试对象:

  • 响应parse()方法
  • 验证它被调用一次
  • 返回我指定的任意对象?

我尝试过的

以下人为设计的示例在调用 sinon.stub() 时失败了因为 sinon.spy()对象不能用 parse stub 方法。 (这个例子还应该验证 fake_parser.parse() 被调用一次 test_text ,但它没有):

var test_text = 'any text'
var fake_parse_tree = sinon.spy()
var fake_parser = sinon.stub(sinon.spy(), 'parse').returns(fake_parse_tree)

expect(fake_parser.parse(test_text)).to.equal(fake_parse_tree)

最佳答案

创建一个虚拟的 Parser 对象并 stub 它的 parse() 方法。详细信息将取决于您如何创建解析器,但类似于:

var Parser = {
parse: function() { }
};

var parseStub = sinon.stub(Parser, 'parse');
parseStub.returns(fake_parse_tree);

// execute code that invokes the parser

parseStub.callCount.should.equal(1);
parseStub.alwaysCalledWithExactly(test_text).should.be.true();

关于javascript - 在 sinon 中创建一个假的 object.method() "from scratch"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198313/

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