1

Hendrixという名前の API ラッパーを構築するための DSL を開発しています。DSL のテストに問題があります。API ラッパーであるため、外部サービスと対話する必要があります。テストの観点からこれにアプローチする方法がわかりません。私は RSpec を使用しており、VCR を WebMock で構成しようとしましたが、うまくいきませんでした。どのようなリクエストが行われているかに直接アクセスできない場合、この特定のシナリオをどのようにテストすればよいでしょうか?

これは私のspec_helper.rbです:

$VERBOSE = nil

require 'simplecov'
require 'coveralls'

SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
  SimpleCov::Formatter::HTMLFormatter,
  Coveralls::SimpleCov::Formatter
]
SimpleCov.start { add_filter '/spec/' }

lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'hendrix'

require 'vcr'

VCR.configure do |c|
  c.cassette_library_dir = 'spec/cassettes'
  c.hook_into :webmock
end

RSpec.configure do |config|
  config.treat_symbols_as_metadata_keys_with_true_values = true
  config.run_all_when_everything_filtered = true
  config.filter_run :focus
  config.order = 'random'
  config.extend VCR::RSpec::Macros
end

プロジェクトは初期段階にあります (現在、バージョン 0.1.0 に向けて作業中)。DSL の構文は次のとおりです。

require 'hendrix'

Hendrix.build 'Jimi' do
  base 'https://api.github.com'

  client :issues do
    action :issue, '/repos/:owner/:repo/issues/:number'
  end
end

Jimi.issue('rafalchmiel', 'hendrix', 1)
  # => {"url"=>"https://api.github.com/repos/rafalchmiel/hendrix/issues/1",
  #  "labels_url"=> ...
Jimi.issue('rafalchmiel', 'hendrix', 1).title
  # => "Implement parameters in actions"

ほとんどの仕様では、マスター モジュール (この場合はJimi.issueetc) からのメソッドが返すものと、それがHashie::Mash形式であるかどうかをテストしています。これをどのようにテストしますか?どこから始めればよいかわかりません。

4

1 に答える 1