Какой формат использовать shoulda-matchers и RSpec new expect syntax?musta-matchers RSpec ожидать синтаксис
ответ
Хотя можно, конечно, использовать 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
формате один-лайнер эти обычно используются шаблоны, которые явно поддерживаются в 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
, чтобы проиллюстрировать это исключение.
См. Также Using implicit `subject` with `expect` in RSpec-2.11, в котором обсуждается вариант конфигурации, который позволяет использовать в качестве альтернативы it
.
expect_it { to validate_presence_of :email }
Update: На RSpec 3.0 (beta2), вы также будете иметь возможность использовать:
it { is_expected.to validate_presence_of :email }
Первый блок также будет окружен «desribe User», верно? Поскольку это выглядит как отстранение 3 строк от 3 разных линий, но это не совсем так. Если это может потребоваться добавить это для ясности в первый блок кода. –
@MichaelDurrant Да, было бы. Согласовано. Спасибо за указание на это. Ответ обновлен. –
Кто-нибудь знает, для чего нужен downvote? Связано ли это с близкими голосами за то, что это «основано прежде всего на мнениях»? –
Я за дополнительную плату в ответ @ питер-alfvin. В случае, если проверить модель и ее миграции себя shoulda-matchers
вы не можете использовать :expect
вне it
блока, так что не может написать:
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
Жаль, что я имел в виду Shoulda – trev9065
Что касается голосования закрывает на основе этого будучи в первую очередь на основе мнения, я Wou ld утверждают, что этот конкретный пример, спрашивающий, является ли что-то «хорошей идеей», является исключением, потому что существует основанное на фактах объяснение, что проблема не является проблемой. –
отредактировал деталь quesrion, чтобы сделать ее подходящей для SO. –