7

関連する質問 は、次のように、統合テストでトークン認証を使用してリクエストをテストできることを意味します。

get "/v1/sites", nil, :authorization => "foo"
assert_response :success

何らかの理由で、ヘッダーがアプリケーションに届きません:

get "/v1/sites", nil, :authorization => "foo"
assert_match response.headers, /foo/

Expected {"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "X-UA-Compatible"=>"chrome=1", "WWW-Authenticate"=>"Token realm=\"Application\"", "Content-Type"=>"text/html; charset=utf-8", "Cache-Control"=>"no-cache", "X-Request-Id"=>"23915302-9cfe-424d-86fe-5d60bc0d6b2c", "X-Runtime"=>"0.054857", "Content-Length"=>"27"} to match /foo/.

throw response.headersコントローラに を配置すると確認できます。たとえばcurlでテストすると、ヘッダーが通過することがわかりますそして、トークンを設定してアクセスすることさえできます。コントローラーからの関連コードは次のとおりです。

module V1
  class SitesController < ApplicationController
    before_filter :restrict_access, :only => :index

    def index
      head :success
    end

    private
    def restrict_access
      authenticate_or_request_with_http_token do |token, options|
        token == "foo"
      end
    end
  end 
end

これは、 Rails-APIを使用した Rails 4 の最小テストです。

参考までに、これがミドルウェア スタックです。これは、ほとんどのデフォルトの Rails アプリよりもはるかにスリムです。

use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x992cd28>
use Rack::Runtime
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::ParamsParser
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
run MyApp::Application.routes
4

2 に答える 2

0

リクエストを実行する直前に、リクエスト オブジェクトにヘッダーを設定できます。

request.env['HTTP_AUTHORIZATION'] = 'foo'
get '/v1/sites'
assert_response :success
于 2013-08-12T09:26:11.777 に答える