Ваш первый вопрос:
... все учебники, которые я вижу для использования Serverspec, следует ожидать, а не ожидать.Это потому, что Serverspec не был обновлен для использования ожиданий?
Нет, это в основном потому, что автор проекта Serverspec предпочитает синтаксис "must", и именно поэтому документация Serverspecпродолжает использовать это.Он объяснил здесь , что:
Я использую синтаксис should
вместо синтаксиса expect
, потому что я думаю, что синтаксис should
более читабелен, чем синтаксис expect
и мне это нравится.
Рекомендуется использовать синтаксис expect
, поскольку добавление should
к каждому объекту приводит к сбоям при использовании с прокси-объектами, подклассифицированными в BasicObject.
Но синтаксис с одной строкойПри использовании с примерами на этой странице не нужно добавлять объекты к объектам, поэтому этот синтаксис не вызывает вышеуказанных проблем.Вот почему я использую однострочный синтаксис.
Имейте в виду, что should
и expect
взяты из проекта rspec-ожидания и автора Serverspecправильное «следует», а не «ожидать» прекрасно в том смысле, как он его использует.
Более подробную информацию об исходной мотивации для ожидаемого синтаксиса можно найти у автора Rspec Майрона Марстона здесь .
Ваш второй вопрос:
... как бы я написал тест, используя ожидания, а не должен?
Если вы все еще хотите использоватьсинтаксис expect
, просто замените should
везде на is_expected.to
везде.Это отлично работает:
describe file("/etc/passwd") do
it { is_expected.to be_file }
its(:content) { is_expected.to match /root/ }
end
Вы также можете написать это так:
describe "passwd file" do
it "the passwd file should be a file" do
expect(file("/etc/passwd")).to be_file }
end
it "and it should contain root" do
expect(file("/etc/passwd").content).to match /root/
end
end
Или даже:
describe file("/etc/passwd") do
it { expect(subject).to be_file }
it { expect(subject.content).to match /root/ }
end
См. Также: