3

rspec_api_documentationを使用して Rails 4 で API を構築していますが、非常に感銘を受けました。エンドポイントを保護するために DoorKeeper を使用することを選択したので、これをすべてコンソールから正常にテストし、機能させることができました。

私が今苦労しているのは、それをどのように特定し、トークンをスタブするかです。

DoorKeeper のドキュメントでは、次の使用が推奨されています。

describe Api::V1::ProfilesController do
  describe 'GET #index' do
    let(:token) { stub :accessible? => true }

    before do
      controller.stub(:doorkeeper_token) { token }
    end

    it 'responds with 200' do
      get :index, :format => :json
      response.status.should eq(200)
    end
  end
end

ただし、rspec_api_documentation に沿って受け入れテストを作成しました。これはprojects_spec.rb私が書いたものです:

require 'spec_helper'
require 'rspec_api_documentation/dsl'

resource "Projects" do
  header "Accept", "application/json"
  header "Content-Type", "application/json"

  let(:token) { stub :accessible? => true }

  before do
    controller.stub(:doorkeeper_token) { token }
  end

  get "/api/v1/group_runs" do
    parameter :page, "Current page of projects"

    example_request "Getting a list of projects" do
      status.should == 200
    end
  end
end

テストを実行すると、次のようになります。

undefined local variable or method `controller' for #<RSpec::Core

これは明らかにコントローラーの仕様ではないためだと思いますが、前述したように、API をテストするこの rspec_api_documentation の方法に固執したいと思います。

きっと誰かがこれをしなければならなかったのですか?トークンをスタブする別の方法はありますか?

前もって感謝します。

4

2 に答える 2

3

同じ問題があり、指定されたトークンを使用してアクセス トークンを手動で作成しました。そうすることで、定義したトークンを Authorization ヘッダーで使用できるようになりました。

resource "Projects" do
  let(:oauth_app) { 
    Doorkeeper::Application.create!(
      name: "My Application", 
      redirect_uri: "urn:ietf:wg:oauth:2.0:oob" 
    ) 
  }
  let(:access_token)  { Doorkeeper::AccessToken.create!(application: oauth_app) }
  let(:authorization) { "Bearer #{access_token.token}" }

  header 'Authorization', :authorization

  get "/api/v1/group_runs" do
    example_request "Getting a list of projects" do
      status.should == 200
    end
  end
end
于 2014-08-14T01:16:05.257 に答える