Подтвердить что ты не робот

Musta-matchers RSpec ожидает синтаксиса

Каков правильный формат для использования shoulda-matchers и RSpec нового синтаксиса ожидания?

4b9b3361

Ответ 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