これには簡単な答えがあるはずですが、見つけるのに苦労しています(RSpecのドキュメント、RSpecを使用したEverydayRailsテスト、Googleの結果を確認しました)。私のモデル仕様では、次のように基本的な属性仕様を含めるのが好きです:
describe Foo do
describe "basic attributes" do
before { @foo = create(:foo) }
subject { @foo }
it { should be_valid }
it { should respond_to(:color) }
it { should respond_to(:height) }
it { should respond_to(:some_other_attribute) }
it { should respond_to(:you_get_the_idea) }
...
これらの仕様が気に入っているのは、工場やモデル内に何らかのエラーが発生した場合に、これらの仕様が迅速に特定するのに役立つからです。
私はexpect
構文を他のすべての仕様に組み込みました。読み方は気に入っていますが、ここでの使用方法は? 1つのオプションは
expect(@foo).to respond_to(:color)
そして別の可能性があります
expect(it).to respond_to(:color)
前者は構文で回避される重複を伴いshould
ますが、後者は私には奇妙に見えます (それは私だけかもしれません)。
この質問は機能性よりもスタイルに関するものだと認識しています*。しかし、私たち Ruby 開発者はスタイルに注意を払っており、標準的な慣行に従い、読みやすく慣用的なコードを作成したいと考えています。どんな助けでも大歓迎です。ありがとう。
更新: ちなみに、私の提案したオプションはどちらも実際には機能しません。undefined method 'expect'
どちらもエラーをスローします。今、私は本当に混乱しています!
エラーについて考えてみると、should
上記の仕様が 1 行のブロック内にあるためだとわかりました。混乱するのは、expect 構文を使用して 1 行のブロックを記述するにはどうすればよいかということです。このアップデートを踏まえると、質問は機能性に関するものであり、他の人の意見を聞くのが楽しみです.
2015年4月更新
rspec > 3.0
これらを処理するさらに別の方法が追加され、構文rspec ~> 4.0
を廃止するように思えます。should
Myron マスターごと:
一部のユーザーは、これが expect 構文にどのように関連するか、および引き続き使用できるかどうかについて混乱を表明しています。これは RSpec 3 でも引き続き利用できます (これも、構文構成に関係なく) が、expect 構文との一貫性が少し高い代替 API も追加しました。
describe Post do
it { is_expected.to allow_mass_assignment_of(:title) }
end
is_expected は、expect(subject) として非常に単純に定義され、is_expected.not_to マッチャーを介して負の期待もサポートします。[...]
RSpec 3 では、should 構文を保持しており、デフォルトで使用できますが、明示的に有効にせずに使用すると、非推奨の警告が表示されます。これにより、RSpec 4 でデフォルトで無効化される (または別の gem に抽出される可能性がある) 道が開かれ、古いチュートリアルを介して RSpec に来る新規参入者の混乱が最小限に抑えられます。