ruby-on-rails - 如何使用 rspec stub 访问器

标签 ruby-on-rails ruby rspec

我有以下类(class):

class TwitterService
  def initialize
    @twitter ||= Twitter
  end

  def get_short_url_length
    @twitter.configuration.short_url_length
  end
end

以及以下规范:

describe TwitterService do
  before(:each) do
    Twitter::Configuration.any_instance.stub(:short_url_length).and_return(12)
  end

  it 'does not send short_url_length request to Twitter' do
    twitter = TwitterService.new
    twitter.get_short_url_length.should == 12
  end
end

我遇到的问题是 Twitter::Configuration 上的 #short_url_length 没有被 stub 。我做错了吗?我想要实现的是能够在不运行 Twitter 库的情况下运行我的 TwitterService#get_short_url_length 方法,这会导致对 Twitter 的 API 的请求导致失败。

我正在使用以下工具:

  • rails 3.2.12
  • Rspec 2.13.0
  • 推特 4.6.2

非常感谢任何帮助!

最佳答案

在您的实现中,您是否确认@twitter.configuration 实际上是 Twitter::Configuration 的一个实例?

无论如何,我认为更好的方法是在您的代码中注入(inject)一个配置,即

def initialize(config = Twitter::Configuration)
  @twitter ||= config
end

这可以是测试替身(模拟或 stub ),或者如果未指定则使用真实服务。

关于ruby-on-rails - 如何使用 rspec stub 访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911822/

相关文章:

ruby - 如何使用 PG gem 解码 JSON 字段?

ruby-on-rails - 在Rails ActionMailer中测试默认值

ruby - 在命令行上将参数传递给 Rspec 测试

ruby-on-rails - Rails 的 bundle install 导致我们所有的 bin 目录内容被覆盖

ruby-on-rails - Rails 4、Devise 和 Mandrill 电子邮件

ruby-on-rails - 你如何从日期时间中减去?

ruby-on-rails - Heroku 给出 500 错误,信息很少+资源文件为空 [Rails]

ruby - 优化递归搜索

ruby-on-rails - 哈希数组的 transform_keys

ruby-on-rails - 如何在 Rails 模型的构造函数中使用参数