shared_examples_forでブロックを引数にとり実行する方法

rspecでテストを書いているとshared_examples_forでブロックを引数にとって実行したい時ありませんか

shared_examples_for内で定義した変数を呼び出しもとに渡したいことがあり、どうすればよいか考えたのちProcを使うことで意図した通りになりました。

shared_examples_forで引数とる


shared_examples_forには引数をとることができ、呼び出しの際に使うit_behaves_likeの第2引数から渡したい値を指定できます。


shared_examples_for ‘HelloWorld’ do |message|
put message # Hello
end
it_behaves_like ‘HelloWorld’, ‘Hello’

こんな感じでブロックでなければ分かりやすく渡すことできます。
では、ブロックを渡すにはどうするのか?

shared_examples_forでブロックを渡す


shared_examples_forでブロックを渡すにはProcのインスタンスを渡すことで、意図した動作にすることができます。


shared_examples_for ‘HelloWorld’ do |message|
message.call(‘Hello’)
end
it_behaves_like ‘HelloWorld’, Proc.new {|message|
put message #Hello
}

テストを共通化しすぎると、思わぬところで逆にメンテナンスコストがかかってしまうこともありますが、ブロックを使うことができることで柔軟にテストを共通化できるようになりました。

この記事を書いた人

コウジ

TypeScriptとVue.jsが好きなフリーランスのフロントエンドエンジニアです。
フロントのHTML・CSS・JavaScriptの設計実装をメインに、RubyとNodeでサーバーサイドやってたりもします。

Web開発の仕事依頼

フリーランスのエンジニアとしてWeb開発の仕事をお引き受けしています。

依頼の検討をしていただきます際はポートフォリオサイトの事業・実績ページをご覧いただき、お問い合わせよりメールや各種SNSよりご連絡ください。

仕事の相談をする
基礎から学ぶ Vue.js