aws-sdk の spec 読んでみる
ちょい一発目のソレが長いので二発目のナニを引用してみます。
it 'strips the /hostedzone/ prefix from the :hosted_zone_id param' do options[:hosted_zone_id] = '/hostedzone/zone-id' handler.should_receive(:handle) do |req,resp| req.uri.should eq('/2012-02-29/hostedzone/zone-id/rrset/') end client.change_resource_record_sets(options) end
これ、rspec てきにどーゆー意味なんでしょ。ということで諸々確認。
まず、lib/aws/api_config/Route53-2012-02-29.yml 確認。根拠は lib/aws/route_53/client.rb の以下のソレです。
module AWS class Route53 # Client class for Route53. class Client < Core::RESTClient define_client_methods('2012-02-29')
で、ラッキーなことに yaml の先頭あたりに change_resource_record_sets な記述があります。
:method: :change_resource_record_sets :http: :verb: POST :uri: /2012-02-29/hostedzone/:hosted_zone_id/rrset/
む、uri なソレの :hosted_zone_id がオプション指定した以下と置き換えなのか。
options[:hosted_zone_id] = '/hostedzone/zone-id'
で、/hostedzone/ がカブッてるので strip、というのが it に渡されてる文字列のソレなのかどうなのか。つうか
handler.should_receive(:handle) do |req,resp| req.uri.should eq('/2012-02-29/hostedzone/zone-id/rrset/') end client.change_resource_record_sets(options)
のあたりの意味が分からぬ。ええと、handler は以下な let で、なのか。
let(:handler) { double('handler', :handle => nil) }
昨日エントリな記述によれば mock を作って、という形。うーん、ちょっと勝手読みしてみると
options が設定された形で client.change_resource_record_sets が呼び出された時に handler の handle メソドが req および resp が渡されて呼び出されるべきで、その時に引数 req の uri メソドはこうなっているべき
てことなのかなぁ。なんとなく違う気もするんですがorz
あってた
ええ? まぢですか。つうかそれ以外には無いっちゃ無いんですが。これで読むスピード上がりますね。
ええと、aws-sdk の試験なパターンとしては
- describe でテスツするクラス (テスト対象としての)
- context でテスツするメソド (テストする時の状況としての)
- let で describe の中で global なシンボルの初期設定
- RESTClient を継承したクラスの試験の場合、試験対象のメソドを呼び出した結果、mock として double したソレの handle というメソドが呼び出されていることを確認している
- そこに渡される req および resp なオブジェクトの挙動を確認する形で確認
ということになっている模様。おそらくは他のパターンもあるはず。
つーかこれ
読めるようになったら色々な意味でアレですな。