LoginSignup
1
1

More than 5 years have passed since last update.

pendingしてからコミットpushしよう 〜RSpecしぐさ〜

Last updated at Posted at 2018-12-05

この記事はOkinawa.rb Advent Calendar 2018の5日目の記事です。
昨日は @hanachin_ さんのTracePointのenable(target: )は戻り値を書き換えるときべんりでした。
明日は @hanachin_ さんのrefineをしてるモジュール取り出せるrefinements_robbery gemです。

red/green/refactor :red_circle: :green_heart: :purple_heart:

所轄こういうやつです

  1. red: あんなこといいな、できたらいいな >できない<
  2. green: >できた<
  3. refactor: >上手にできた<

pendingの心

redを書いてもテストが落ちない優しい機能、それがpending

最後にテスト書いたら絶対落ちない説

テスト絶対落としたくないから先に実装しちゃおう。

ッシャ、実装かけた!!!

/tmp/pending.rb
using Module.new {
  refine(Object) {
    def pleasure?
      true
    end
  }
}

テストかこ

/tmp/pending.rb
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

ワンチャン実装ミスってるかもしれないから試しにコメントアウトしてテストしよ

/tmp/pending.rb
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しよ。。。

落ちるテストコミットすると絶対落ちる説

こないだ絶対落ちないテスト書いちゃったから絶対落とそう。

ッシャ、テスト書けた!!!

/tmp/pending.rb
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の心

ッシャ、テスト書けた!!!

/tmp/pending.rb
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

カタカタカタ、ッシャ、実装できた

/tmp/pending.rb
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

/tmp/pending.rb
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

では。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1