我制作了一个自制的配方,现在只能在我当地的水龙头上使用。我想将pull请求发送到homebrew-core。现在我需要为我的公式编写测试。如何根据以下示例编写?
test do
output = shell_output("#{bin}/balance 2>&1", 64)
assert_match "this is balance #{version}", output
end
我的公式
#!/usr/bin/env ruby
def match
files = Dir.glob("*")
if ARGV.length == 0
puts "usage: match <keyword>"
return
end
files.each { |x|
if File.directory?(x)
puts "#{x}_ found directory"
puts "***"
next
end
found = false
File.open(x).each_line.with_index do |line, index|
if line.include? ARGV[0]
puts "#{x}_ #{index+1} #{line}"
found = true
end
end
puts "***" if found
}
end
match
Brew公式
class Match < Formula
desc "Browse all files inside any directory for a keyword"
homepage "https://github.com/aatalyk/homebrew-match"
url ""
sha256 ""
def install
bin.install "match"
end
end
答案 0 :(得分:3)
在Homebrew公式中测试shell命令通常遵循以下方案:
在您的情况下,由于match
类似于grep -R
,您可以使用某些内容创建一堆文件,然后运行match <something>
并确保找到正确的文件。
您可以在测试中使用任何Ruby代码以及shell_output("...command...")
等Homebrew实用程序来获取命令的输出。
以下是您可以编写的测试示例:
class Match < Formula
# ...
test do
# Create two dummy files
(testpath/"file1").write "foo\nbar\nqux"
(testpath/"file2").write "bar\nabc"
# Ensure `match bar` finds both files
assert_match "file1_ 2 bar\n***\nfile2_ 1 bar",
shell_output("#{bin}/match bar")
# Ensure `match abc` finds the second file
assert_match "file2_ 2 abc", shell_output("#{bin}/match abc")
# Ensure `match idontmatchanything` doesn’t match any of the files
assert_not_match(/file[12]/,
shell_output("#{bin}/match idontmatchanything"))
end
end
assert_match "something", shell_output("command")
确保(1)command
成功运行,(2)其输出包含&#34; something
&#34;。