我正在尝试为厨师(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
+"
答案 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