我听说我应该使用期望而不是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
那么我该如何使用期望而不是应该的方式编写测试?
答案 0 :(得分:1)
您的第一个问题:
...我看到的所有用于Serverspec的教程都应该而不是期望。这是因为Serverspec尚未更新为使用期望值吗?
不,主要是因为Serverspec项目的作者偏爱“ should”语法,这就是Serverspec文档继续使用它的原因。他向here解释说:
我使用
should
语法而不是expect
语法,因为我认为should
语法比expect
语法更具可读性,而且我喜欢它。推荐使用
expect
语法,因为在与BasicObject子类化的代理对象一起使用时,向每个对象添加should
会导致失败。但是此页面中的示例所使用的单行语法不会添加到任何对象,因此该语法不会导致上述问题。这就是为什么我使用单线应语法。
请注意,should
和expect
来自rspec-expectations项目,Serverspec作者是正确的“应该”而不是“期望”,这是他使用方式的正确选择。
Rspec的作者Myron Marston here提供了有关期望语法的原始动机的更多信息。
您的第二个问题:
...我该如何使用期望而不是应该的方式编写测试?
如果您仍然想使用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
另请参阅: