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

この記事を書いた人

コウジ

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

Web開発の仕事依頼

フリーランスのエンジニアとしてWeb開発の仕事をお引き受けしています。
特にVue.js(Nuxt.js)には力をいれています。

ご依頼の検討をしていただきます際はお問い合わせよりご連絡ください。

また自身のWEBサイトも運営しているので、事業内容や実績について気になる方は見ていただければと思います。
フリーランス「村上浩司」

Vue.jsをちゃんと勉強する人におすすめ!
基礎から学ぶ Vue.js