Middlewareをテストしたい
対象モジュール
[railsのログにタグづけしたい ベジタブルプログラム](https://www.blog.v41.me/posts/c8804b8e-6ac2-450c-b5ea-9009c1a43da4)
テスト
RSpec.describe TaggedLogger do subject { TaggedLogger::Middleware.new(app) } let(:app) { ->(env) { [200, env, "app"] } } let(:request) { Rack::MockRequest.new(subject) } let(:action_dispatch_request) { ActionDispatch::TestRequest.create } before do allow(ActionDispatch::Request).to receive(:new).and_return(action_dispatch_request) allow(action_dispatch_request).to receive(:session).and_return(Struct.new(:user_id, :loaded?).new(*session_methods)) allow(Rails.logger).to receive(:tagged).and_yield request.get("/path/to/api") end context "user_idが存在する" do let(:session_methods) { [1, true] } it do aggregate_failures do expect(Rails.logger).to have_received(:tagged).with("user_id=1").ordered expect(Rails.logger).to have_received(:tagged).once end end end end 参考
大まかに参考にした
ruby on rails - Testing Middleware with Rspec - Stack Overflow
Middlewareの引数の作成方法
taggedはblockをゴニョゴニョする必要があった
ActionDispatch::Request のモックを作成
This post is licensed under CC BY 4.0 by the author.