読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

Turnip 1.2.3 リリースされました

ruby rspec turnip

Release Version 1.2.3 · jnicklas/turnip · GitHub

未定義のステップを Pending ではなく Failure 扱いにするオプション

  Scenario: Unimplemented step
    When HAHAHA

このシナリオで HAHAHA が定義されていない 場合、通常であれば

Pending:
  Step-calling steps Unimplemented step When HAHAHA
    # No such step: 'HAHAHA'
    # ./spec/features/foo.feature:19

Finished in 0.00259 seconds (files took 0.14445 seconds to load)
1 example, 0 failures, 1 pending

このように Pending 扱い になっていました。1.2.3 からは

RSpec.configure do |config|
  config.raise_error_for_unimplemented_steps = true
end

という設定をしておくと

Failures:

  1) Step-calling steps Unimplemented step When HAHAHA
     Failure/Error: When HAHAHA
     Turnip::Pending:
       HAHAHA
     # ./spec/features/foo.feature:19:in `HAHAHA'
     # (snip...)

Finished in 0.0027 seconds (files took 0.1541 seconds to load)
1 example, 1 failure

このように Failure 扱い に変更できるようになりました。

テスト実行後の各ステップ名にキーワードが付与

こんな感じになります。

 A simple feature
   This is a simple feature
-    there is a monster -> I attack it -> it should die
+    Given there is a monster -> When I attack it -> Then it should die

横並びだから元々見辛いみたいなところはありますが…

Placeholder で一度に複数のシンボルを指定できるようになった

たとえば

  Scenario: Input password
    When input kevin's password to password field
     And input kevin's password to confirm password field
    Then password and confirm password are equal

みたいなシナリオがあって、これらのステップを

step 'input :password to password field' do |password|
  @password = password
end

step 'input :confirmation_password to confirm password field' do |password|
  @confirm_password = password
end

step 'password and confirm password are equal' do
  expect(@password).to eq @confirm_password
end

このように定義したとします。この時、:password および :confirmation_password の部分を placeholder でカスタマイズしたいと考えると、これまでのバージョンでは

placeholder :password do
  match(/kevin's password/) do
    'kevin@example.com'
  end
end

placeholder :confirmation_password do
  match(/kevin's password/) do
    'kevin@example.com'
  end
end

このように 同じ入力であれば同じ出力をする ものでも、必ずシンボル毎に書かなければいけませんでした。そこまで変なことではないのですが、できれば併せて書きたい、という要望があったのでしょう。1.2.3 からはこう書けるようになりました。

placeholder :password, :confirmation_password do
  match(/kevin's password/) do
    'kevin@example.com'
  end
end

DRY !

おまけ

このバージョンであらかた RSpec 3 対応は終わったと思われます。 ちなみに RSpec 3.1 を試してみましたが、特にエラーとかはなく普通に実行できました