6

ログインユーザーが必要なCucumberシナリオを作成しようとしています-通常は非常に簡単ですが、OpenID認証のみを使用しています(認証プラグインの礼儀)。しかし、open_id_authentication プラグインの内臓を掘り下げた後、Cucumber 内でこれをどのように達成できるかわかりません。

4

4 に答える 4

4

これをfeatures/support/env.rbに配置すると、方法がわかりました:

ActionController::Base.class_eval do
  private

  def begin_open_id_authentication(identity_url, options = {})
    yield OpenIdAuthentication::Result.new(:successful), identity_url, nil
  end 
end

次に、適切なステップで次のようなことを行うことができます。

Given /^I am logged in as "(.*)"$/ do |name|
  user = User.find_by_name(user)
  post '/session', :openid_url => user.identity_url
  # Some assertions just to make sure our hack in env.rb is still working
  response.should redirect_to('/')
  flash[:notice].should eql('Logged in successfully')
end

キュウリ機能のオープンID認証を完全に壊しているだけです.ログインに失敗したインスタンスが必要な場合は、提供されたidentity_urlに基づいてそれを行うことができます.

于 2008-12-19T23:48:11.140 に答える
2

Rails スケルトン アプリであるBortには、rspec テストの完全なセットがあり、openID ログインをサポートしているため、それらが何をするかを見てみたいと思うかもしれません。

于 2009-01-03T14:36:48.033 に答える
2

応答をスタブ化できるようにしたい場合は、次のようにします。

features/support/helpers.rb:

ActionController::Base.class_eval do

  private
    def fake_openid_response(identity_url)
      [OpenIdAuthentication::Result.new(:successful), identity_url, nil]
    end

    def begin_open_id_authentication(identity_url, options = {})
        yield fake_openid_response(identity_url)
    end 
end

応答を別のメソッドに移動することで、必要に応じてステップで応答をスタブできるようになりました。たとえば、:missing 応答が必要で、コントローラ GoogleLoginController がある場合、Mocha を使用して次のことができます。

GoogleLoginController.any_instance.stubs(:fake_openid_response)
    .returns([OpenIdAuthentication::Result.new(:missing), identity_url, nil])
于 2010-07-09T20:52:08.587 に答える
0

次のようにidentity_urlを正規化する必要があることを除いて、DEfusionの答えは機能します。

ActionController::Base.class_eval do

    private

        def begin_open_id_authentication(identity_url, options = {})
            yield OpenIdAuthentication::Result.new(:successful), self.normalize_identifier(identity_url), nil
        end 
end

ありがとう

于 2009-01-03T13:30:26.530 に答える