Как сгенерировать файл с именами методов в классе?

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

У меня есть этот модульный тестовый файл:

 class WebsiteCheckPageElements < Test::Unit::TestCase

def setup
 ...
end

def test_achievements_iknow_report_page
  ...
end

def test_achievements_daily_report_page
  ...
end

def test_client_side_report_page
  ...
end
end
 

Мне нужно написать скрипт ruby, который будет записывать имена тестов в текстовый файл. Что-то вроде
настройка
test_achievements_iknow_report_page
test_achievements_daily_report_page
test_client_side_report_page

Заранее благодарю за предложения.

Комментарии:

1. Почему это помечено как «ruby-on-rails»?

Ответ №1:

Более надежный способ, чем другой ответ:

 File.open("test_methods.txt", "w") do |f|
  WebsiteCheckPageElements.instance_methods.each do |method|
    f << "#{method}n"
  end
end
 

Это фактически будет использовать среду выполнения Ruby и не будет подвергаться случайному сопоставлению def в местах, где он не определяет метод (например, внутри строки), он не будет соответствовать другим классам в файле и будет правильно считывать иерархию наследования.

Ответ №2:

Вы могли бы использовать простой скрипт, который использует регулярные выражения для печати строк, которые соответствуют def :

match_test_methods.rb

 File.open('your_unit_test_file.rb').each_line do |line|
  match = line.match(/def (. )/)
  puts match[1] if match
end
 

Затем поместите результат выполнения скрипта в текстовый файл

 ruby match_test_methods.rb > test_methods.txt