Post

Omniauthのsetupをテストしたい

解決

  def setup
    omniauth_strategy.options[:consumer_key] = Global..twitter.consumer_key
    omniauth_strategy.options[:consumer_secret] = Global..twitter.consumer_key_secret

    render json: { message: "Omniauth setup phase." }, status: :not_found
  end
RSpec.describe SessionController, type: :controller do subject { get :setup, params: { provider: :twitter } } let(:strategy_options) { Struct.new(:options).new({consumer_key: nil, consumer_secret: nil}) } let(:consumer_key) { "twitter-mock-consumer_key" } let(:consumer_secret) { "twitter-mock-consumer_key_secret" } before do allow(Global.twitter).to receive(:consumer_key).and_return(consumer_key) allow(Global.twitter).to receive(:consumer_key_secret).and_return(consumer_secret) allow(controller.request.env).to receive(:[]).and_call_original allow(controller.request.env).to receive(:[]).with("omniauth.strategy").and_return(strategy_options) end context "Success" do it "カスタムキーのセットアップを行う" do subject aggregate_failures do expect(strategy_options.options[:consumer_key]).to eq consumer_key expect(strategy_options.options[:consumer_secret]).to eq consumer_secret expect(response).to have_http_status(:not_found) end end end end

注意点

paramsの設定

subject { get :setup, params: { provider: :twitter } }

【Rspec】ネストされているコントローラーのテストについて。「No route matches」と言わせない書き方 - 文系人間がエンジニアを目指すブログ

元の値を引用

allow(controller.request.env).to receive(:[]).and_call_original

[Rspec Make a mock against hash - Qiita](https://qiita.com/YumaInaura/items/e22552edc476167b9213#example-1)
This post is licensed under CC BY 4.0 by the author.