Rspec,您可以存根对象上不存在的方法(或模拟可以采用任何方法的对象)吗?

詹姆士

这听起来像是一个非常基本的问题...所以让我解释一下上下文。我正在从Stripe检索一个事件,但出于此目的,但这对于我考虑过的其他事情也起作用。

我在Stripe对象中需要的数据被深埋,所以我必须这样做event.data.object.date.lines.first.id我不确定如何模拟/存根...

我能想到的唯一方法是创建一个模拟Stripe事件对象的假模型(在本例中,请记住,Stripe事件不能由用户创建)。然后我可以模拟那个假模型。但这真的是这样做的方法吗?我是否可以使用某种方式仅使用Rspec对整个shebang进行存根处理,并说event.data.object.date.lines.first.id无论出现在什么地方都应该重新调整1

哦,还有...如果没有,事实证明我确实必须创建一个假模型...备受赞赏的技巧,因为现在我正在考虑这种“假”模型需要多层子对象,并且完全不需要值得花时间投资。

彼得·阿尔夫文

RSpec没有提供特殊的机制来访问被测元素,因此,是的,您将需要以某种方式stub使该id方法返回所需的任何内容(例如1)。

为此,您必须有一种方法可以访问event测试中对象,以便可以对它的data方法进行存根一旦可以访问它,就可以使用RSpec的receive_message_chain匹配器指定要返回的方法的顺序(如果调用)1

如果有一些公共Strip方法,您可以嘲笑以返回doublefor事件,这将是最直接的方法。

如果无法实现,则可以确定的类,event然后使用allow_any_instance_of方法对它的data方法进行存根假设您是您关注Fooevent对象的类,则生成的模拟如下

allow_any_instance_of(Foo)).to receive_message_chain(
  :data, :object, :date, :lines, :first, :id).and_return(1)

这是通过的测试:

module Stripe
  class Event ; end
end
describe 'stack overflox example' do
  it 'should pass' do
    event = Stripe::Event.new
    expect(event).to receive_message_chain(:data, :object, :date, :lines, :first, :id).and_return(23)
    expect(event.data.object.date.lines.first.id).to eq(23)
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

该模拟对象上不存在方法-Laravel,Mockery

来自分类Dev

存根或模拟不存在的方法时,如何配置Rspec引发错误?

来自分类Dev

值对象可以不存在实体吗?

来自分类Dev

构造Scrapy Request对象时,可以指定任何方法作为回调吗?

来自分类Dev

我可以调用作为模板参数的对象的任何方法吗?

来自分类Dev

Mockery和PHPUnit:此模拟对象上不存在方法

来自分类Dev

Mockery和PHPUnit:此模拟对象上不存在方法

来自分类Dev

RSpec 存根服务对象方法

来自分类Dev

您可以在Vertex的属性中存储任何对象吗?

来自分类Dev

无法存根方法“标题”,因为模拟的类OCMock中不存在这样的方法

来自分类Dev

无法存根方法“标题”,因为在模拟的类OCMock中不存在这样的方法

来自分类Dev

在Scala中,是否有任何方法可以检查实例是否为单例对象?

来自分类Dev

在AWS Resolver映射模板中,是否有任何方法可以从对象中删除字段?

来自分类Dev

Javascript:是否有任何方法可以防止将对象重复放入数组?

来自分类Dev

将BitmapImage加载到WriteableBitmap中,但不存在任何方法

来自分类Dev

如果对象在PHP中不存在,是否有一种方法可以将对象参数值设置为空字符串

来自分类Dev

对象方法可以返回对象的实例吗?

来自分类Dev

我可以制作一个采用实例并将map对象返回为静态的方法吗?

来自分类Dev

是否可以调用模拟对象的方法?

来自分类Dev

您可以在mvc库中阻止方法吗(或实际上在任何类中)

来自分类Dev

是否可以存根或模拟被测类的方法?

来自分类Dev

模拟“应该接收”但方法不存在

来自分类Dev

属性“”在类型“对象”上不存在

来自分类Dev

我可以在标头中定义和声明extern对象的任何方式吗?

来自分类Dev

您可以在VB.Net中的匿名类型的对象中重写基类的方法吗?

来自分类Dev

您可以从方法属性访问拥有的对象吗?

来自分类Dev

您可以在方法中使用无限的自定义对象吗?

来自分类Dev

servlet 中的请求对象是否有任何方法可以识别网页的页面重新加载事件

来自分类Dev

Rspec模拟,“期望”是否也可以将方法存根为副作用?

Related 相关文章

  1. 1

    该模拟对象上不存在方法-Laravel,Mockery

  2. 2

    存根或模拟不存在的方法时,如何配置Rspec引发错误?

  3. 3

    值对象可以不存在实体吗?

  4. 4

    构造Scrapy Request对象时,可以指定任何方法作为回调吗?

  5. 5

    我可以调用作为模板参数的对象的任何方法吗?

  6. 6

    Mockery和PHPUnit:此模拟对象上不存在方法

  7. 7

    Mockery和PHPUnit:此模拟对象上不存在方法

  8. 8

    RSpec 存根服务对象方法

  9. 9

    您可以在Vertex的属性中存储任何对象吗?

  10. 10

    无法存根方法“标题”,因为模拟的类OCMock中不存在这样的方法

  11. 11

    无法存根方法“标题”,因为在模拟的类OCMock中不存在这样的方法

  12. 12

    在Scala中,是否有任何方法可以检查实例是否为单例对象?

  13. 13

    在AWS Resolver映射模板中,是否有任何方法可以从对象中删除字段?

  14. 14

    Javascript:是否有任何方法可以防止将对象重复放入数组?

  15. 15

    将BitmapImage加载到WriteableBitmap中,但不存在任何方法

  16. 16

    如果对象在PHP中不存在,是否有一种方法可以将对象参数值设置为空字符串

  17. 17

    对象方法可以返回对象的实例吗?

  18. 18

    我可以制作一个采用实例并将map对象返回为静态的方法吗?

  19. 19

    是否可以调用模拟对象的方法?

  20. 20

    您可以在mvc库中阻止方法吗(或实际上在任何类中)

  21. 21

    是否可以存根或模拟被测类的方法?

  22. 22

    模拟“应该接收”但方法不存在

  23. 23

    属性“”在类型“对象”上不存在

  24. 24

    我可以在标头中定义和声明extern对象的任何方式吗?

  25. 25

    您可以在VB.Net中的匿名类型的对象中重写基类的方法吗?

  26. 26

    您可以从方法属性访问拥有的对象吗?

  27. 27

    您可以在方法中使用无限的自定义对象吗?

  28. 28

    servlet 中的请求对象是否有任何方法可以识别网页的页面重新加载事件

  29. 29

    Rspec模拟,“期望”是否也可以将方法存根为副作用?

热门标签

归档