この記事はOkinawa.rb Advent Calendar 2018の5日目の記事です。
昨日は @hanachin_ さんのTracePointのenable(target: )は戻り値を書き換えるときべんりでした。
明日は @hanachin_ さんのrefineをしてるモジュール取り出せるrefinements_robbery gemです。
red/green/refactor
所轄こういうやつです
- red: あんなこといいな、できたらいいな >できない<
- green: >できた<
- refactor: >上手にできた<
pendingの心
redを書いてもテストが落ちない優しい機能、それがpending
最後にテスト書いたら絶対落ちない説
テスト絶対落としたくないから先に実装しちゃおう。
ッシャ、実装かけた!!!
using Module.new {
refine(Object) {
def pleasure?
true
end
}
}
テストかこ
using Module.new {
refine(Object) {
def pleasure?
true
end
}
}
RSpec.describe "usingをキメると気持ちいい" do
it { is_expected.to be }
end
テストしよ
% rspec /tmp/pending.rb
.
Finished in 0.00275 seconds (files took 0.08694 seconds to load)
1 example, 0 failures
通った⤴⤴⤴
コミットしてpushしとこ
% git add .
% git commit -m "通った⤴⤴⤴"
% git push
ワンチャン実装ミスってるかもしれないから試しにコメントアウトしてテストしよ
using Module.new {
refine(Object) {
def pleasure?
# true
end
}
}
RSpec.describe "usingをキメると気持ちいい" do
it { is_expected.to be }
end
>0 failures<
% rspec /tmp/pending.rb
.
Finished in 0.00275 seconds (files took 0.08998 seconds to load)
1 example, 0 failures
なにこのテスト絶対落ちないじゃん。。。
もうpushしちゃった。。。
force pushしよ。。。
落ちるテストコミットすると絶対落ちる説
こないだ絶対落ちないテスト書いちゃったから絶対落とそう。
ッシャ、テスト書けた!!!
RSpec.describe "usingをキメると気持ちいい" do
subject { self.pleasure? }
it { is_expected.to eq(true) }
end
テストしよ
% rspec /tmp/pending.rb
F
Failures:
1) usingをキメると気持ちいい
Failure/Error: subject { self.pleasure? }
NoMethodError:
undefined method `pleasure?' for #<RSpec::ExampleGroups::Using "example at ./pending.rb:3">
# ./pending.rb:2:in `block (2 levels) in <top (required)>'
# ./pending.rb:3:in `block (2 levels) in <top (required)>'
Finished in 0.0018 seconds (files took 0.08667 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./pending.rb:3 # usingをキメると気持ちいい
テスト通るまで待て的な?
% git checkout -b pleasure
% git add .
% git commit -m "テスト通るまで待て的な?"
カタカタカタ、ッシャ、テスト通った! マージしよ
% git add .
% git commit -m "よき"
% git checkout master
% git merge pleasure
〜チェックアウトすると絶対に落ちるコミットが永遠に残った(完)〜
おとなたちに伝えたいpendingの心
ッシャ、テスト書けた!!!
RSpec.describe "usingをキメると気持ちいい" do
subject { self.pleasure? }
pending { is_expected.to eq(true) }
end
テストしよ
% rspec /tmp/pending.rb
*
Pending: (Failures listed here are expected and do not affect your suite's status)
1) usingをキメると気持ちいい
# No reason given
Failure/Error: subject { self.pleasure? }
NoMethodError:
undefined method `pleasure?' for #<RSpec::ExampleGroups::Using "example at ./pending.rb:3">
# ./pending.rb:2:in `block (2 levels) in <top (required)>'
# ./pending.rb:3:in `block (2 levels) in <top (required)>'
Finished in 0.00186 seconds (files took 0.08631 seconds to load)
1 example, 0 failures, 1 pending
実装されてNASA
% git checkout -b add_pleasure_test
% git add .
% git commit -m 'テストを追加した'
とりまテスト書いたんでマージしまーーーす、0 failuresでーーーす。
% git checkout master
% git merge add_pleasure_test
カタカタカタ、ッシャ、実装できた
using Module.new {
refine(Object) {
def pleasure?
true
end
}
}
RSpec.describe "usingをキメると気持ちいい" do
subject { self.pleasure? }
pending { is_expected.to eq(true) }
end
テストしよ
% rspec /tmp/pending.rb
F
Failures:
1) usingをキメると気持ちいい should eq true FIXED
Expected pending 'No reason given' to fail. No error was raised.
# ./pending.rb:11
Finished in 0.00213 seconds (files took 0.08681 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./pending.rb:11 # usingをキメると気持ちいい should eq true
エラー出てないのに落ちてて草www
itおかしwww
using Module.new {
refine(Object) {
def pleasure?
true
end
}
}
RSpec.describe "usingをキメると気持ちいい" do
subject { self.pleasure? }
it { is_expected.to eq(true) }
end
itに書き換えおけまる水産、テストしよ
% rspec /tmp/pending.rb
.
Finished in 0.00204 seconds (files took 0.08792 seconds to load)
1 example, 0 failures
結果にコミット
% git add .
% git commit -m "気持ちいいいいい"
% git push
まとめ
どのコミットをチェックアウトしてもテストが通る、それがRSpecしぐさ、pendingの心。
テストだけ
コミットするなら
pending
では。