假设我有一个对象,该对象具有创建另一个对象作为其操作的一部分的函数。
sinon = require('sinon')
chai = require 'chai'
sinonChai = require("sinon-chai")
chai.use(sinonChai)
chai.should()
Paper = {}
Paper.Origami = require('../assets/src/coffee/origami.coffee').Paper.Origami
describe '#throwOrigami', ->
it 'should create origami and throw it', ->
m = new Monkey()
throwSpy = sinon.spy(m, 'throwOrigami')
createSpy = sinon.spy(Paper, 'Origami')
# next function creates origami, then 'throws' it at someone
m.throwOrigami();
createSpy.should.have.been.calledWithNew
throwSpy.should.have.been.calledOnce
Monkey 类在顶部有一个 require Paper.Origami
。
如果我在测试中创建一个 Origami,我可以通过这个测试,但如果我将它留给 Monkey 对象的 create 内部,它将不会通过。我怀疑这是因为两个对象之间的要求路径不同——也许节点不会将它们视为同一个对象。
问题:我可以让sinon
间谍监视Origami
对象内部发生的Monkey
对象的创建吗?