【问题标题】:Returning mock objects from factory girl从工厂女孩那里返回模拟对象
【发布时间】:2009-02-25 23:50:00
【问题描述】:

我在 JRuby rails 应用程序中使用 Mocha 和 Factory_girl。当我打电话给工厂时,我想返回已经完成一些模拟的对象。这是我正在尝试做的代码 sn-p。

Factory.define :tweet_feed_with_tweets, :parent => :tweet_feed do |t|
  t.expects(:pull_tweets).returns([Factory.build(:status),Factory.build(:status)])
end

因为我不希望我的单元和功能测试实际从 twitter API 中提取,所以我想存根该方法,以便它返回我想要的。但是,这是行不通的。对象在没有任何存根的情况下返回。有没有办法在工厂女孩创建的对象返回给您之前实际执行存根?

【问题讨论】:

  • 你找到答案了吗?我的回答有帮助吗?

标签: ruby unit-testing mocking factory-bot ruby-mocha


【解决方案1】:

回调现在可用:

Factory.define :tweet_feed_with_tweets, :parent => :tweet_feed do |t|
  t.after_build do |tt|  
    tt.expects(:pull_tweets).returns([Factory.build(:status),Factory.build(:status)])
  end
end

【讨论】:

    【解决方案2】:

    查看factory_girl 的文档和源代码,看起来生成给块的对象(在您的示例中为t)是Factory 的实例,而不是您想要的对象的实例构造(在您的示例中为tweet_feed_with_tweets)。这意味着在t 上设置pull_tweets 方法的期望值是在Factory 实例上设置期望值,而不是在调用Factory(:tweet_feed_with_tweets) 时将构造的对象上设置期望值。我认为这解释了为什么您的示例没有按预期工作。

    我可能是错的,但我看不到在 Factory.define 块中添加期望的方法。您可能已经想到了这一点,但我认为您最好在构建实例后在测试中添加期望:-

    def test_should_do_something
      tweet_feed = Factory(:tweet_feed)
      tweet_feed.expects(:pull_tweets).returns([Factory.build(:status), Factory.build(:status)])
      # test stuff here
    end
    

    如果你在多个地方需要这个,你可以将它提取到一个方法中:-

    def test_should_do_something
      tweet_feed = build_tweet_feed_with_tweets
      # test stuff here
    end
    
    private
    
    def build_tweet_feed_with_tweets
      tweet_feed = Factory(:tweet_feed)
      tweet_feed.expects(:pull_tweets).returns([Factory.build(:status), Factory.build(:status)])
      return tweet_feed
    end
    

    其他一些想法:-

    1. 我认为无论如何,在这样一个隐蔽的地方设定期望可能是个坏主意。
    2. 如果你打算这样做,我会认为使用stubsexpects 更合适。
    3. 可能值得将pull_tweets 方法(和任何类似方法)分成TwitterAPI 类。这样一来,您需要在测试中对 TwitterAPI 设置期望值似乎不会那么糟糕。

    我希望其中的一些帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多