1

Ruby (Rails) は初めてですが、RailsCast チュートリアル (#68) に従って、OpenID ログインをアプリケーションに追加できます。テスト ( Test::Unit )を作成したいと思います。モックとスタブについていくつか読みましたが、どのように進めればよいかよくわかりません。

これは、セッションコントローラーの外観です。

def create
  if using_open_id?
    open_id_authentication(params[:openid_url])
  ...
  end
end

protected
def open_id_authentication(openid_url)    
  authenticate_with_open_id(...) do |result, identity_url, registration|
    if result.successful?
    ...
    end
  end
end

簡単なテストを作成しましたが、「authenticate_with_open_id」内のブロックをテストできませんでした。

どんな助けにも感謝します

4

2 に答える 2

0

@mikej が説明するトリックは、setupこのようにテスト用のブロックでラップすると、うまくいきます

require 'test_helper'

class PostsControllerTest < ActionController::TestCase

  #wrap in a setup block
  setup do
    def @controller.current_user
      User.first
    end
  end
于 2014-12-02T09:39:33.300 に答える
0

コントローラー テスト内で、次のようにコントローラーのメソッドの 1 つをオーバーライドできます。

def @controller.some_method
  ..
end

authenticate_with_open_idしたがって、この手法を使用してメソッドをスタブ化できます。

ここで、「認識されていない ID URL を使用して Open ID ログインを成功させるために新しいユーザーが作成される」というシナリオのテストを書きたいとしますauthenticate_with_open_id。ブロックに適切なパラメーターを生成するメソッドを使用してスタブ化する必要があります。例えば

class SuccessfulResult
  def successful?
    true
  end
end

def @controller.authenticate_with_open_id(url, options)
    yield SuccessfulResult.new, "NEW_IDENTITY", {'nickname' => 'testuser', 'email' => 'testuser@example.org' }
end

using_open_id?また、返す必要がtrueあります。これは、スタブ化するか、要求で必要なパラメーターを渡すことによって行うことができます。

次に、追加のユーザーが通常の方法でデータベースに追加されたことをアサートできます。

于 2013-09-30T21:09:45.883 に答える