【发布时间】:2015-05-12 18:03:50
【问题描述】:
tl;博士
如何在 sinon 中“从头开始”创建 object.method()?
上下文
例如,我有一系列Parser 类,其中每个类都实现#parse(text) 方法并返回ParseTree 对象或返回null。
我正在进行单元测试,而我不测试Parser 对象本身(它们在其他地方进行了测试),但我需要一个响应#parse() 的可测试对象。我可以实例化并存根一个真正的 Parser,但这会将不必要的代码拖入测试的这一部分。
问题
我很确定这很容易使用 sinon 的 spy()、stub() 和/或 mock() api,所以:我如何创建一个可测试的对象:
- 响应 parse() 方法
- 验证它是否被调用过一次
- 返回我指定的任意对象?
我尝试过的
以下人为设计的示例在调用 sinon.stub() 时失败,因为无法使用 parse 方法存根 sinon.spy() 对象。 (这个例子还应该验证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)
【问题讨论】:
标签: javascript node.js mocha.js sinon chai