ruby-on-rails - 在开发环境中为外部调用创建假行为

标签 ruby-on-rails ruby development-environment

我正在编写需要搜索外部 API 的代码,但在开发过程中我无法访问此 API,因此我当前运行服务器和在系统中导航的解决方案是:

def api_call
   return { fake: 'This is a fake return' } if Rails.env.development?

   # api interaction code
   # ...
end

这让我的代码变脏了,所以我的问题是:是否有一种模式(或更好的方法)可以做到这一点?

最佳答案

我使用的模式是在开发时用一个伪造所有方法的对象替换 api 对象。

class Api
  def query
    # perform api query
  end
end

class FakeApi
  def query
    { fake: 'This is a fake return' }
  end
end

# config/environments/production.rb
config.api = Api.new

# config/environments/test.rb
# config/environments/development.rb
config.api = FakeApi.new

# then

def api_call
  Rails.configuration.api.query # no branching here! code is clean
end

基本上,您有两个类,Api 执行实际工作,FakeApi 返回预烘焙的伪造响应。然后使用 Rails 的环境配置在不同的环境中设置不同的 api。这样,您的客户端代码(调用 #query)就不必关心当前环境。

关于ruby-on-rails - 在开发环境中为外部调用创建假行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281238/

相关文章:

ruby - 如何解析来自 JSON 对象的数据?

ruby - 沙发土 bean : no such file to load -- json/add/rails

macos - PC 到 Macbook Pro 的过渡 - 开始(重新)开始?

ruby-on-rails - 在 Rails 中,管理 Web 应用程序内容区域的最佳概念方法是什么?

ruby-on-rails - rails 错误 - `require' : no such file to load -- rubygems (LoadError)

ruby-on-rails - 为什么 slice 需要 !上类?

python - 如何自动安装本地 "development mode"包?

ruby-on-rails - 在 rails 中优雅地处理 Postgres 服务器

ruby-on-rails - ActiveRecord find_each 和 Postgres

vmware - 针对隔离开发/测试网络的 VM 中的开发环境