Поддерживает ли Serverspec ожидания или мне нужно использовать?

Я слышал, что мне следует использовать ожидания, а не утверждения «следует» в Serverspec.

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

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

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
167
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

... all of the tutorials I see for Serverspec use should rather than expect. Is this because Serverspec hasn't been updated to use expectations?

Нет, это в основном потому, что автор проекта Serverspec предпочитает синтаксис «следует», и поэтому документация Serverspec продолжает его использовать. Он объяснил здесь, что:

I'm using should syntax instead of expect syntax because I think should syntax is more readable than expect syntax and I like it.

Using expect syntax is recommended way because adding should to every object causes failures when used with BasicObject-subclassed proxy objects.

But the one-liner syntax used with the examples in this page doesn't add should to any objects, so this syntax doesn't cause the above problems. That's why I'm using the one-liner should syntax.

Имейте в виду, что should и expect взяты из проекта rspec-ожидания, и автор Serverspec прав, что «следует», а не «ожидается», что это нормально, как он его использует.

Дополнительную информацию об исходной мотивации синтаксиса ожидания можно получить у автора Rspec Майрона Марстона здесь.

Ваш второй вопрос:

... how would I write the test using expectations instead of should?

Если вы все еще хотите использовать синтаксис 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

Смотрите также:

Если вы используете что-то из rspec-its, то оно должно соответствовать форме is_expected.to, например its(:exit_status) { is_expected.to eql(0) }.

Matt Schuchard 22.05.2019 14:54

@MattSchuchard, все равно можно писать как expect(subject.exit_status).to eql(0) и т.д.

Alex Harvey 22.05.2019 15:15

Я не видел этого раньше и не мог заставить это работать сам, но если это правда, то rspec-its удаляется как отладка Serverspec, а удаление ненужных отложений — это все вокруг.

Matt Schuchard 22.05.2019 15:16

Я бы не стал слишком волноваться, @MattSchuchard, потому что Rspec в любом случае является зависимостью от Serverspec. (Я не знаю, как остановить его установку, несмотря ни на что.) Я протестировал приведенное выше здесь: github.com/alexharv074/serverspec-test/blob/master/spec/…

Alex Harvey 22.05.2019 15:23

Другие вопросы по теме