首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何窥探在另一个对象内部调用的构造函数?

我应该如何窥探在另一个对象内部调用的构造函数?
EN

Stack Overflow用户
提问于 2013-02-19 02:30:53
回答 1查看 513关注 0票数 1

假设我有一个对象,它有一个函数,可以创建另一个对象作为其操作的一部分。

代码语言:javascript
复制
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类在顶部有一个对Paper.Origami的要求。

如果我在测试中创建了一个折纸,我可以让这个测试通过,但是如果我把它留给Monkey对象内部的create,它就不会通过。我怀疑这是因为两个对象之间的请求路径不同--可能node将它们视为不同的对象。

问:我能否让sinon间谍监视在Monkey对象内部创建的Origami对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 16:04:40

require在查找其缓存之前解析路径,因此路径不同并不重要。但是,您需要在测试中创建一个具有Origami属性的新Paper对象。因此,当您监视Paper, 'Origami'时,您在测试文件中本地创建的Paper对象的属性Origami将被替换为间谍。我想您可以改为执行以下操作:

代码语言:javascript
复制
Paper = require('../assets/src/coffee/origami.coffee').Paper

如果现在更改Paper对象,它将与Monkey模块中使用的对象相同。然而,我建议使用像proxyquire这样的东西来监视或模拟依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14942984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档