【问题标题】:Rspec stub array of classesRspec 存根类数组
【发布时间】:2014-06-22 11:44:19
【问题描述】:

我定义了一个这样的循环:

 api.release(release_url).rels[:assets].get.data.each do |existing_file|
   log "Already Contains: #{existing_file.name}"
 end

我如何存根existing_file.name?我希望它也给它多个值。

我试着像这样存根:

      provider.api.release.rels[:assets].get.stub(:data).and_return([{ :name => "foo.bar"}, { :name => "bar.foo"])

但这会返回错误:undefined method 'name' for Hash。这让我觉得我正在遍历一系列类。关于如何存根的任何建议?感谢您的帮助!

【问题讨论】:

  • 可能为时已晚,但您可能想在 Google 上搜索“依赖注入”。
  • 还有Law of Demeter

标签: ruby rspec rspec2


【解决方案1】:

使用double - 你应该这样做:

provider.api.release.rels[:assets].get.stub(:data).and_return(
  [double(:name => "foo.bar"), double(:name => "bar.foo")]
)

【讨论】:

    【解决方案2】:

    试试这个:

    创建一个辅助类,我们称之为 Clazz,并使用它来代替哈希。

    class Clazz < Struct.new(:name); end;
    
    provider.api.release.rels[:assets].get.stub(:data).and_return([Clazz.new("name1"), Clazz.new("name2")])
    

    现在您可以使用和调用name 作为方法。

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多