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 の方法に固執したいと思います。
きっと誰かがこれをしなければならなかったのですか?トークンをスタブする別の方法はありますか?
前もって感謝します。