RSpecレベル上げ@レベル1

最近、ほとんど開発ができてないので、諸々の学習復習を兼ねてid:t-wadaさんのRSpec入門記事を一周させてもらいました。


開発環境はVim。主目的がRSpec習熟度上げのため、Gitへのコミットは書き捨てスクリプトで自動化するという暴挙に出ます。

#! /usr/local/bin/ruby
unless (ARGV.size == 2)
  puts "Usage: ruby autocommit.rb iteration step"
  exit
end
@time = Time.now
def update?(files)
  files.each do |f|
    now = File.mtime(f)
    if now > @time
      @time = now
      return true
    end
  end
  return false
end
files = ["message_filter.rb", "message_filter_spec.rb"]
iteration = ARGV[0]
step = ARGV[1].to_i
1200.times do
  if update?(files)
    %x[git add #{files.join(" ")} &]
    %x[git commit -m "#{iteration}-#{sprintf("%02d", step)}" &]
    step += 1
  end
  sleep 10
end

内容を変更せずに更新した場合は通番が1つ飛ぶなどの問題がありますが、本質的でないのでスルー。


これを

$ ruby autocommit.rb 1 1 &

バックグラウンドで動かしつつ開発を行います。


ファイルが2つ出来てからは同時に開いて作業します。

$ vim me*


作業中の保存は:xではなく:wで。

:w


次のファイルを編集

:n


前のファイルを編集

:N


Gitログを確認

:! git log


RSpecを実行

:! rspec -cfs message_filter_spec.rb

バージョン(2.4.0)のせいか出力結果は少し異なります。




レベル1ならこんなもんでしょうか。
つぎからはコメントちゃんと書こう・・




<参考>
第3イテレーション終了時点でのテスト結果

MessageFilter
  with argument "foo"
    should have 1 ng_words
    it should behave like MessageFilter with argument "foo"
      should be detect "hello from foo"
      should not be detect "hello, world!"
      ng_words
        should not be empty
  with argument "foo","bar"
    should be detect "hello from bar"
    should have 2 ng_words
    it should behave like MessageFilter with argument "foo"
      should be detect "hello from foo"
      should not be detect "hello, world!"
      ng_words
        should not be empty

Finished in 0.00459 seconds
9 examples, 0 failures