4

参考までに、私は新進気鋭の開発者です。Ruby gem の http POST メソッドのテストを作成しようとしています。私が理解できることから、たとえばRuby WebMock gemを使用してhttp応答をスタブすると、基本的に何を投稿するかを伝え、次に何を応答するかを人為的に伝えています。たとえば、テストしようとしているコードは次のとおりです。

## githubrepo.rb

module Githubrepo

include HTTParty

def self.create(attributes)

  post = HTTParty.post(
      'https://api.github.com/user/repos',

      :headers => {
        'User-Agent' => 'Githubrepo',
        'Content-Type' => 'application/json',
        'Accept' => 'application/json'
      },

      :basic_auth => {
          :username => attributes[:username],
          :password => attributes[:password]
      },

      :body => {
          'name' => attributes[:repository],
          'description' => attributes[:description]
      }.to_json
  )

Githubrepo.parse_response_from(post, attributes[:wants_ssh])

end

次のように書くと、RSpec テストが失敗します。

Githubrepo.create(:repository => 'test', :username => 'test_user', :password => '1234')

実際の HTTP リクエストを作成するためです。代わりに次のことを行うことをお勧めします。

        stub_request(:post, "https://test_user:test_password@api.github.com/user/repos").
                with(:body => "{\"name\":\"test_repo\",\"description\":null}",
                     :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Githubrepo'}).
           to_return(:status => 200, :body => "", :headers => {})

しかし、私には、基本的に何を送信し、何を応答するかを伝えているため、これは無意味に思えます。私はURLを編集して言うことができ、"https://bananas@git-banana.banana"RSpecheaderContent-type => 'Rumplestilskin'それでOKです。createこれを上記で指定したメソッドの機能のテストにどのように統合すればよいでしょうか? または、もしあれば、誰かがこの質問の助けになる初心者ガイドやブログを教えてもらえますか? Ruby gem の README は、ユーザーがこのことについてすでに 1 つまたは 2 つのことを知っていることを前提としているようですが、私は知りません。

4

1 に答える 1