我正在開發用於構建API包裝的DSL,名爲Hendrix。我在測試DSL時遇到問題。由於它是一個API包裝器,它需要與外部服務進行交互。我不確定在測試方面如何處理這個問題。我正在使用RSpec並嘗試使用WebMock配置VCR,但沒有運氣。如果我沒有直接訪問正在進行的請求,我該如何測試這個特定的場景?在這種情況下,我將如何使用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.issue
等)的回報,無論是在Hashie::Mash
格式。我如何測試這個?我不知道從哪裏開始。
太棒了,男人!非常感謝;只是我需要的答案。 – raf