0

Rspec (2.13.0) 要求仕様を使用して、モバイル サイトのログイン API をテストしています。テストデータベースにユーザーを正しく書き込み、dbにauth_tokenを生成するlogin_userメソッドがあります。

「モバイル ログイン ページのテストのみ」の例では、auth_token がセッション値として正しく設定されているとは思えません。ログイン後にリダイレクトが発生し、そのリダイレクトで正しい auth_token が送信されていることがわかります (login_user メソッドのコメントを参照)。

私の構文は間違っていますか (このような要求仕様を使用するのはこれが初めてです)? コントローラーの仕様を使用するか、ラックテストを使用する方がよいでしょうか?

thx事前に

def login_user
  @user = FactoryGirl.create :user
  visit '/arc/signin'
  fill_in 'Email', with: 'jxt@jxt.com'
  fill_in 'Password', with: 'foobar'
  click_button 'Log in'
  # from test.log showing that auth_token is actually called
  # Processing by UsersController#home as HTML
  # ESC[1mESC[35mUser Load (0.4ms)ESC[0m  SELECT `users`.* FROM `users` WHERE `users`.`auth_token` = 'pCnpG90vIw3qUAoXx3EBsA' LIMIT 1
  #
end

it "just testing the mobile-login-page" do
  login_user
  get '/arc/v1/api/signup-mobile-test'
  puts response.body
  JSON.parse(response.body)[:auth_token] == (@user.auth_token)
end

コントローラーで:

def create_user_test                                           
  m={}                                                         
  m[:status]="success"                                         
  m[:auth_token]=session[:auth_token]
  render :json => m.to_json                                    
end                                                            

出力は次のとおりです。

Fri Apr 26$ rspec spec/requests/static_page_spec.rb 
{"status":"success","auth_token":null}
.....

Finished in 0.80587 seconds
5 examples, 0 failures
4

1 に答える 1

3

2 つの異なるテスト ハーネスを使用しており、セッション状態を共有していません。

、、および使用しているメソッドはvisit、カピバラとラックテストを通過します: http://rubydoc.info/gems/capybara/Capybara/Session#visit-instance_methodfill_inclick_button

API リクエストを作成するために使用しているメソッドは、Railsのget組み込み統合テストからのものです: http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

visit2 番目の例の代わりに使用するとget、作成されたセッションが表示されlogin_userます。

capybara は実際のユーザーと同じようにユーザー インターフェイスを介してサイトと対話するように設計されているため、capybara を使用して直接 API をテストすることは一般的に推奨されません。JavaScript API を背後に持つリッチな UI をテストしていると仮定しています。

その場合は、次の 2 つのテスト アプローチを組み合わせて使用​​します。

  • ユーザーインターフェイスをナビゲートし、API に直接アクセスすることのないカピバラ仕様。これらのスペックは、ログイン時に生成されたセッションを使用できます。
  • API を直接ヒットして、エッジ ケースと条件をすばやくテストするコントローラー仕様。これらの仕様は、セッションをコントローラーに直接渡すことも、モック フレームワークを使用して認証をスタブ化することもできます。
于 2013-04-26T19:49:11.103 に答える