私の質問は非常に簡単ですが、ここで答えを見つけることができませんでした:
メソッドをスタブしてパラメーター自体を返すにはどうすればよいですか (たとえば、配列操作を行うメソッドで)。
このようなもの:
interface.stub!(:get_trace).with(<whatever_here>).and_return(<whatever_here>)
私の質問は非常に簡単ですが、ここで答えを見つけることができませんでした:
メソッドをスタブしてパラメーター自体を返すにはどうすればよいですか (たとえば、配列操作を行うメソッドで)。
このようなもの:
interface.stub!(:get_trace).with(<whatever_here>).and_return(<whatever_here>)
注:スタブメソッドは廃止されました。これを行う最新の方法については、この回答を参照してください。
stub!
ブロックを受け入れることができます。ブロックはパラメーターを受け取ります。ブロックの戻り値はスタブの戻り値です。
class Interface
end
describe Interface do
it "should have a stub that returns its argument" do
interface = Interface.new
interface.stub!(:get_trace) do |arg|
arg
end
interface.get_trace(123).should eql 123
end
end
stub メソッドは、expect を支持して廃止されました。
expect(object).to receive(:get_trace).with(anything) do |value|
value
end
https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/configuring-responses/block-implementation
(モック)allow
の代わりに (スタブ)を使用できます。expect
allow(object).to receive(:my_method_name) { |param1, param2| param1 }
名前付きパラメータを使用:
allow(object).to receive(:my_method_name) { |params| params[:my_named_param] }
以下は実際の例です。
S3StorageService
メソッドを使用してファイルを S3 にアップロードするがあるとしますupload_file
。このメソッドは、アップロードされたファイルへの S3 ダイレクト URL を返します。
def self.upload_file(file_type:, pathname:, metadata: {}) …
さまざまな理由 (オフライン テスト、パフォーマンスの向上など) から、そのアップロードをスタブ化する必要があります。
allow(S3StorageService).to receive(:upload_file) { |params| params[:pathname] }
そのスタブはファイル パスのみを返します。