Как мне написать тест для доморощенной формулы? - PullRequest
0 голосов
/ 30 мая 2018

Я сделал формулу доморощенного, которая теперь доступна только для моих локальных кранов.Я хочу отправить запрос на извлечение в 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

Пивоваренная формула

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

1 Ответ

0 голосов
/ 01 июня 2018

Тесты для команд оболочки в формулах Homebrew обычно следуют этому сценарию:

  1. создает контекст, используемый командой: репозиторий git, иерархия каталогов, пример файла и т. Д.
  2. запустите команду
  3. , подтвердите, что результат правильный

В вашем случае, поскольку match подобен grep -R, вы можете создать группу файлов с некоторым содержимым, затем запустите match <something> и убедитесь, что он находит правильные файлы.

Вы можете использовать любой код Ruby в своих тестах, а также утилиты Homebrew, такие как shell_output("...command..."), чтобы получить выходные данные команды.

Вот пример теста, который вы можете написать:

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) его вывод содержит "something".

...