Ruby 搜索字符串minitest的命令输出

Ruby 搜索字符串minitest的命令输出,ruby,chef-infra,minitest,Ruby,Chef Infra,Minitest,我正在尝试为chef创建一个minitest(minitest::spec),但我对如何在ruby中实现我想要的东西有点迷茫 我想做的是让代码运行'date'命令,然后检查输出是否包含'UTC' 到目前为止我已经知道了,但我不知道如何检查输出是否为“true”: it "uses the correct timezone" do timezone_check = shell_out("date") timezone_check.to_s.include?('UTC') end

我正在尝试为chef创建一个minitest(minitest::spec),但我对如何在ruby中实现我想要的东西有点迷茫

我想做的是让代码运行'date'命令,然后检查输出是否包含'UTC'

到目前为止我已经知道了,但我不知道如何检查输出是否为“true”:

it "uses the correct timezone" do
    timezone_check = shell_out("date")
    timezone_check.to_s.include?('UTC')
end
我试图使用.must\u输出,但我不知道如何合并它。这是实现我想要的最好的方法吗

欢迎您的任何意见

谢谢

编辑:我现在尝试了以下方法:

  it "uses the correct timezone" do
    date_input = `date`
    proc { puts date_input.to_s }.must_output /UTC/
  end
但其结果是:

Failure:
test_0002_uses_the_correct_timezone(recipe::base::default) [/var/chef/minitest/base/default_test.rb:18]:
In stdout.
--- expected
+++ actual
@@ -1 +1,2 @@
-/UTC/
+"Fri Apr 19 17:50:27 UTC 2013
+"

将其包装在proc中并尝试使用。该测试可能如下所示:

it "uses the correct timezone" do
    proc { timezone_check = shell_out("date") }.should_output /UTC/
end
从文档中不能完全确定
应该\u output
方法是否会接受模式,但是如果您可以编写测试以便准确地知道预期的整个输出,那么您可以简单地针对预期的完整字符串进行测试。例如

it "uses the correct timezone" do
    proc { timezone_check = shell_out("date") }.should_output("Fri Apr 19 12:33:13 CDT 2013")
end

测试
shell\u out
要求您根据
stdout

it "uses the correct timezone" do
  timezone_check = shell_out("date")
  timezone_check.stdout.must_match /UTC/
end

有关更多示例,请查看

查看MiniTest::Expections文档。或者,如果这仍然让人困惑的话,看看哈哈,当你发布时,我实际上打开了这两个页面:)它们并没有真正解释每一个页面的功能,而且我对ruby不是非常熟悉,所以我不知道如何在没有示例的情况下实现它们……我尝试使用第一个带有必录输出的示例,但是shell似乎没有产生任何结果:
1)失败:test\u 0002\u在stdout中使用正确的时区(recipe::base::default)[/var/chef/minitest/base/default\u test.rb:17]:。预期值:/UTC/Actual:“
,我不能使用第二个示例,因为每次输出都会不同。