shoulda-matchers とRSpecの新しい 構文を期待する を使用するための正しい形式は何ですか?
確かに、次のように新しいexpect構文でshoulda-matchersを使用できます。
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
が次のように暗黙のサブジェクトで使用されている場合:
describe User
it { should validate_presence_of :email }
end
Kernel
が依存するshould
のモンキーパッチには依存しません。
これについては https://github.com/rspec/rspec-expectations/blob/master/Should.md で説明されています。実際、そのドキュメントでは、上記のshoulda
マッチャーの例を使用してこの例外を説明しています。
RSpec-2.11の `expect`で暗黙の` subject`を使用する も参照してください。これは、it
の代わりに使用できる構成オプションについて説明しています。
expect_it { to validate_presence_of :email }
更新:RSpec 3.0(beta2)以降、以下も使用できるようになります。
it { is_expected.to validate_presence_of :email }
@ peter-alfvinの答えを補足します。モデルとその移行自体をshoulda-matchers
でテストする場合、it
ブロックの外で:expect
を使用することはできないため、次のように書くことはできません。
RSpec.describe ModelName, type: :model do
expect(subject).to belong_to(:user)
end
そして、あなたは期待を得るでしょう:
`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