0

APIをテストするためのアプリの非常に単純な統合テストをいくつか行いました。Facebook ログインの統合テストを追加したいと思います。私はこれを行う方法についてかなり混乱しています。2つの選択肢があるようです。1 つは、Facebook に電話をかけ、実際にログインしてみることです。Firefox での私の Facebook セッションが使用されるかどうかは不明です。別のオプションは、facebook 呼び出しを別のものにモックし、セッション値を手動で設定することです。

私の現在のユーザーは現在次のように設定されています:

application_controller.rb

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

これらの技術のいずれかが可能でしょうか?一方が他方よりも優れていますか?

どうも

4

1 に答える 1

0

まず、omniauthwikiの統合テストのセクションを読む必要があります。基本的に、このアプローチでは、webmock gemを使用して、指定したプロバイダーからの応答をモックします。

私はこのアプローチをツイッターのモックに使用しています。私のconfig/omniauth.rbには、次のものがあります。

if (ENV["RAILS_ENV"] == 'test' || ENV["RAILS_ENV"] == 'development')
  module OmniAuthHelpers
    def self.add_twitter_mock(uid, name, nickname)
      OmniAuth.config.add_mock(:twitter,
                               { :provider => 'twitter',
                                 :uid => uid,
                                 :info => { :name => name, :nickname => nickname})
end

次に、私のステップ定義(キュウリの場合)には、次のものがあります。

Given /^I am logged into Twitter as the following user:$/ do |table|
  add_twitter_mock(table.rows_hash[:uid],
                   table.rows_hash[:name],
                   table.rows_hash[:nickname])
end

そして私の機能では、例えば:

Scenario: Valid login through Twitter
  Given I am logged into Twitter as the following user:
    | name     | John Doe      |
    | uid      | 12345         |
    | nickname | jdoe          |
  And I am on the homepage
  When I click on "Sign in through Twitter"
  ...

この場合、「Twitter経由でサインイン」リンクは「/ auth / twitter」にリンクし、「/ auth/twitter」はモックされたTwitterAPIにリクエストを送信します。その後はすべて通常どおりに進行します(「jdoe」などへのリンクが表示されます)。

于 2012-08-26T05:00:59.313 に答える