2013-09-08 20 views
25

shoulda-matchersとRSpecの新しいexpect syntaxを使用する正しい形式は何ですか?shoulda-matchers RSpecは構文を期待しています

+0

申し訳ありませんが、私はshouldaを意味しました – trev9065

+0

これは主に意見ベースに基づいて投票 - 閉鎖に関しては、私はうわーldは、何かが「良いアイデア」であるかどうかを尋ねるこの特定の例は、懸念が非問題であるという事実に基づく説明があるため、例外であると主張する。 –

+0

は、それが適切であるようにquesrionの詳細を編集しました。 –

答えて

55

1は確かに次のように新しい構文を期待してshoulda-マッチャを使用することができますが:

it 'should validate presence of :email' do 
    expect(subject).to validate_presence_of :email 
end 

以上簡潔かつ読みにくく:

it { expect(subject).to validate_presence_of :email } 

ワンライナーshould形式これらマッチャーは通常、config.syntax == :expectの場合でも2.14で明示的にサポートされています。それはshouldがそうでなければ依存しているKernelの猿のパッチ適用に依存しない

describe User 
    it { should validate_presence_of :email } 
end 

:のようにshouldが暗黙の件名で使用されている

これはhttps://github.com/rspec/rspec-expectations/blob/master/Should.mdでカバーされています。実際には、このドキュメントでは、この例外を説明するために上記のshouldaマッチャーの例を使用しています。

Using implicit `subject` with `expect` in RSpec-2.11も参照してください。itの代わりに使用できる設定オプションについて説明しています。

expect_it { to validate_presence_of :email } 

更新:RSpecの3.0(ベータ2)のとおり、あなたも使用することができます:

it { is_expected.to validate_presence_of :email } 
+0

最初のブロックは 'desribe User'に囲まれるでしょう、そうですか?それは3行の3行の比較のように見えますが、それほどではありません。もしそうなら、それを最初のコードブロックに明瞭にするために追加したいかもしれません。 –

+0

@MichaelDurrantはい、そうです。合意したこれを指摘してくれてありがとう。回答が更新されました。 –

+0

誰もがdownvoteが何であるか考えている?これは "主に意見に基づく"という近い票に関連していますか? –

0

私は@ピーター・alfvinの答えをsuplementます。あなたはshoulda-matchersとモデルとその移行に自分自身をテストする場合は、あなたはitブロックの:expect外を使用することはできませんので、書くことはできません。

RSpec.describe ModelName, type: :model do 
    expect(subject).to belong_to(:user) 
end 

そして、あなたはexpectionを取得します:

`expect` is not available on an example group (e.g. a `describe` or `context` block). 

正しいバージョンは:

RSpec.describe ModelName, type: :model do 
    it { expect(subject).to belong_to(:user) } 
end 
関連する問題