doorkeeperのgemを使用していて、リクエストテストでアクセストークンが必要な場合のやり方
環境
Ruby 3.0.2
Rails 6.1.4.1
Factoryの作成
アクセストークンをFactoryで擬似的に作成。
factories下にapplications.rb
とaccess_tokens.rb
を作成
spec/factories/doorkeeper/applications.rb
FactoryBot.define do
factory :doorkeeper_application, class: 'Doorkeeper::Application' do
sequence(:name) { |n| "Application #{n}" }
redirect_uri { 'https://アプリのURI/callback' }
end
end
spec/factories/doorkeeper/access_tokens.rb
FactoryBot.define do
factory :doorkeeper_access_token, class: 'Doorkeeper::AccessToken' do
transient do
user { build :user }
end
association :application, factory: :doorkeeper_application
resource_owner_id { user.id }
expires_in { 2.hours }
scopes { 'read public' }
end
end
RSpec.describe "Api::V1::Attendances", type: :request do
let!(:user) { create(:user) }
let!(:oauth_app) { create(:doorkeeper_application) }
let!(:access_token) { create(:doorkeeper_access_token, application: oauth_app, user: user, scopes: 'read') }
let!(:headers) { { 'Authorization': "Bearer #{access_token.token}" } }
describe "GET /api/v1/abc" do
subject { get '/api/v1/abc', headers: headers }
it '200を返すこと' do
subject
expect(response).to have_http_status 200
end
end
end
注意
テスト環境でマイグレーションするのを忘れないこと!
参考