2013-09-08 7 views
25

Какой формат использовать shoulda-matchers и RSpec new expect syntax?musta-matchers RSpec ожидать синтаксис

+0

Жаль, что я имел в виду Shoulda – trev9065

+0

Что касается голосования закрывает на основе этого будучи в первую очередь на основе мнения, я Wou ld утверждают, что этот конкретный пример, спрашивающий, является ли что-то «хорошей идеей», является исключением, потому что существует основанное на фактах объяснение, что проблема не является проблемой. –

+0

отредактировал деталь quesrion, чтобы сделать ее подходящей для SO. –

ответ

55

Хотя можно, конечно, использовать 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 } 
+0

Первый блок также будет окружен «desribe User», верно? Поскольку это выглядит как отстранение 3 строк от 3 разных линий, но это не совсем так. Если это может потребоваться добавить это для ясности в первый блок кода. –

+0

@MichaelDurrant Да, было бы. Согласовано. Спасибо за указание на это. Ответ обновлен. –

+0

Кто-нибудь знает, для чего нужен downvote? Связано ли это с близкими голосами за то, что это «основано прежде всего на мнениях»? –

0

Я за дополнительную плату в ответ @ питер-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