Поддерживает ли Serverspec ожидания или я должен использовать? - PullRequest
0 голосов
/ 22 мая 2019

Я слышал, что я должен использовать ожидания, а не "следовало бы" в Serverspec

Я гуглял ожидания, которые можно использовать для сопоставления файлов, но все учебники, которые я вижу для использования Serverspec, лучшечем ожидать.Это потому, что Serverspec не был обновлен для использования ожиданий?

describe file('/etc/yum.conf') do
  it { should be_file }
  it { should be_owned_by 'root' }
  it { should be_grouped_into 'root' }
  it { should be_mode 644 }

  its(:content) { should match /^gpgcheck=1$/ }
  its(:content) { should match /^clean_requirements_on_remove=1$/ }
end

Итак, как бы я написал тест, используя ожидания вместо «должен»?

1 Ответ

1 голос
/ 22 мая 2019

Ваш первый вопрос:

... все учебники, которые я вижу для использования 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

См. Также:

...