【问题标题】:How should I test this code with rspec rails?我应该如何使用 rspec rails 测试这段代码?
【发布时间】:2016-11-02 16:56:40
【问题描述】:

在我的 rails 应用程序中,我有一个带有 API 调用的模块,我想为其编写 rspec 测试。你会为此写什么适当的测试?我已阅读不要将 httparty 与 rspec 结合使用,因为它非常慢,现在我不知道该怎么做。感谢您的建议!

module BandsInTown
  class API
    attr_reader :artist_name, :info, :events

    def initialize(artist_name)
        @artist_name = artist_name
    end

    def artist_info
        @info = fetch_data
    end

    def artist_events
        @events = fetch_data 'events'
    end

    private

    def fetch_data(endpoint = nil)
        request_url = "http://api.bandsintown.com/artists/#{[@artist_name, endpoint].compact.join('/')}.json?api_version=2.0&app_id=AUTH_KEY"
        resp = HTTParty.get(request_url)
        return false if resp.code != 200
        resp
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    我会使用 webmock 来绕过 API 请求。

    这是一个示例,说明您 spec_helper.rb 中的代码可能如下所示:

    require 'webmock/rspec'
    
    def stub_api_requests
      response = File.read('spec/fixtures/payload.json')
      stub_request(:get, %r{http:\/\/api.bandsintown.com\/artists/\/(.)*})
        .to_return(
          status: 200,
          body: response
        )
    end
    
    config.before(:each) do
      stub_api_requests
    end
    

    【讨论】:

    • 谢谢 Vasile,这将进入 spec_helper 但 rspec 测试本身会出现什么?
    • 我不确定我是否理解。只需像往常一样测试方法。您可以使用 webmock 控制响应。
    • 现在明白了!谢谢!
    • 没问题。如果我的回答对您有帮助,请点赞,或者选择它作为最佳答案。如果没有,请告诉我如何使其更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多