Rspecの処理順について

今回、初めてRspecをお使うことになり、コーディングし、動かしたら期待した動作をしなかったので調査してみた。

以下、処理ブロックごとに標準出力を行うサンプルコードを書いて動かしたところ、どうも特殊な処理順をしているようであったので、まとめておく。

test.rb

puts “1”
describe “describe” do
 puts “2”
 context “context” do
  puts “3”
  it “it” do
   puts “4”
  end
  puts “5”
 end
 puts “6”
 context “context” do
 puts “7”
  it “it” do
   puts “8”
  end
  puts “9”
 end
 puts “10”
end
puts “11”



実行した結果は以下の通り

[root@localhost ~]# rspec test.rb
1
2
3
5
6
7
9
10
11
4
.8
.

Finished in 0.00171 seconds (files took 0.06492 seconds to load)
2 examples, 0 failures

[root@localhost ~]#


基本的に上から処理されていくのは、他の言語と同じであるが、itメソッドの中の処理のみ、他の全ての動作が終わった後に処理されているような動きをしていることがわかった。
そのため、itメソッドの外での最後の値でitメソッドの処理が行われるので、コーディングに注意が必要だった。。。
一度、気付いたら以降は問題ないと思うが、rspecについて調べても、このことが記述されているサイトが見当たらなかった。。。

※記事の内容は保証はしておりません(執筆時期や実施環境により挙動が変わるものがある為)。
別途検証してご利用いただくことをおすすめいたします。