Rails を API として使用する成熟したコードベースを維持しています。Rails アプリは、リアルタイム、非 Web、非 HTTP プロトコルである MQTT を使用していくつかの処理を行います。
一部のユーザーは、MQTT プロトコルを介して同じ REST コマンドをシミュレートする機能を要求しています (認証を 2 回行い、2 つの異なるプロトコル クライアントを持つ必要がなくなります)。
Facebook の API など、 JSON を使用して HTTP リクエストの一部をリクエストに入れることで HTTP を「シミュレート」するプロジェクトを見てきました (例: JSON ペイロードに「ヘッダー」と「メソッド」プロパティを設定する)。これはまさに私がやりたいことですが、完全に HTTP コンテキストの外にあります。MQTT メッセージを処理するバックグラウンド ワーカーで発生します。
ActionDispatch とその仲間を使用して、コントローラーのディスパッチを単独でシミュレートすることは可能ですか?
ActionDispatch::Request
RSpec の外部でオブジェクトを分離してインスタンス化する方法に関するドキュメントを見つけるのに苦労しています。
MyController.dispatch("create",
ActionDispatch::Request.new({"???" => "Can't find any docs on this one."}),
ActionDispatch::Response.new("?"))
# => RuntimeError: Missing rack.input