字符串minitest的搜索命令输出

时间:2013-04-19 17:13:50

标签: ruby chef minitest

我正在尝试为厨师(minitest :: spec)创建一个minitest,我对如何在ruby中完成我想要的东西感到有点迷失。

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

到目前为止,我有这个,但我不知道如何检查'true'的输出:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

测试shell_out要求您针对stdout

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

有关更多示例,请查看Cookbook Integration Testing