2013-10-09 55 views
1

我正在做一個需要搜索外部API的代碼,但在開發過程中,我無法訪問此API,因此我目前的解決方案是運行服務器並瀏覽系統是:在開發環境中爲外部調用創建假行爲

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

    # api interaction code 
    # ... 
end 

這讓我的代碼很髒,所以我的問題是:有一種模式(或更好的方法)來做到這一點?

回答

3

我使用的模式是將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的環境配置在不同的環境中設置不同的apis。這樣,您的客戶端代碼(即調用#query)不必關心當前的環境。

+0

不錯,這是一個優雅的解決方案,你有沒有讀過關於它的一些rails書/文章? – daniloisr

+0

@daniloisr:從同事那裏學習。 –

+0

謝謝,我現在將使用它,直到我找到更好的方法(如果存在) – daniloisr

1

Webmock(https://github.com/bblimke/webmock)通常被認爲是挖掘外部服務的最佳選擇,還具有讓您測試您的方法如何解析API響應的額外好處。

+0

謝謝,我會嘗試它 – daniloisr