0

我正在尝试为厨师(minitest::spec)创建一个迷你测试,但我对如何在 ruby​​ 中完成我想要的有点迷茫。

我想要做的是让代码运行“日期”命令,然后检查输出是否包含“UTC”。

到目前为止我有这个,但我不知道如何检查输出是否为“真”:

it "uses the correct timezone" do
    timezone_check = shell_out("date")
    timezone_check.to_s.include?('UTC')
end

我尝试使用 .must_output,但我不知道如何合并它。这甚至是实现我想要的最佳方式吗?

任何输入表示赞赏!

谢谢。

编辑:我现在已经试过了:

  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
+"
4

2 回答 2

1

将其包装在 proc 中并尝试使用must_output. 测试可能看起来像:

it "uses the correct timezone" do
    proc { timezone_check = shell_out("date") }.should_output /UTC/
end

从文档中不能完全确定该should_output方法将接受模式,但如果您可以编写测试以准确了解预期的整个输出,那么您可以简单地测试完整的预期字符串。例如

it "uses the correct timezone" do
    proc { timezone_check = shell_out("date") }.should_output("Fri Apr 19 12:33:13 CDT 2013")
end
于 2013-04-19T17:33:46.297 回答
1

测试shell_out要求您针对stdout

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

有关更多示例,请查看Cookbook 集成测试

于 2013-04-19T17:49:59.860 回答