Каков правильный формат для использования shoulda-matchers и RSpec нового синтаксиса ожидания?
Musta-matchers RSpec ожидает синтаксиса
Ответ 1
В то время как можно было бы обязательно использовать consa-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
, который обычно используется для этих совпадений, явно поддерживается в 2.14, даже когда config.syntax == :expect
. Когда should
используется с неявным субъектом, как в:
describe User
it { should validate_presence_of :email }
end
он не полагается на патч обезьяны Kernel
, что should
в противном случае зависит от.
Это описано в https://github.com/rspec/rspec-expectations/blob/master/Should.md. Фактически, эта документация даже использует приведенный выше пример shoulda
для сравнения этого исключения.
См. также Использование неявного` subject` с `expect` в RSpec-2.11, в котором обсуждается параметр конфигурации, который позволяет использовать в качестве альтернативы it
.
expect_it { to validate_presence_of :email }
Обновление: Начиная с RSpec 3.0 (beta2), вы также сможете использовать:
it { is_expected.to validate_presence_of :email }
Ответ 2
Я получу ответ от @peter-alfvin. Если вы тестируете модель и ее миграцию с помощью shoulda-matchers
, вы не можете использовать :expect
вне блока it
, поэтому не можете писать:
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