如何使用 grep 和 glob 在文件目录中查找字符串?



所以我在过去的一个半小时左右一直在搞砸这个,只是不知道该怎么做。

在我的 Ruby test.rake 文件中,该文件在创建快照 Gem 后从另一个项目调用,我需要检查另一个项目的 Rakefile 中是否存在 Capybara 的依赖项,因为我们已经弃用了 Capybara 并用其他东西替换它。

因此,我包含一个简单的检查以查看项目是否包含功能/Capybara 测试,如果是,则扫描每个规范测试并查看它是否包含对 Capybara 的依赖,如果是,则记录警告以告诉用户 Capybara 已被弃用。

我的问题是,我根本无法让它工作。当我将其附加到 Jenkins 作业并运行它时,我在 else 子句中不断收到意外的 Print 语句。

我在这里错过了什么吗?据我了解,我的代码正在做以下事情:

  1. 检查规范/功能目录是否存在
  2. 使用 glob 选择目录中以 .rb 结尾的所有文件(规范测试(,并将每个文件实例分配给文件
  3. 获取文件的当前实例,读取它的每一行,并使用 grep 在其中查找单词"capybara"的任何实例,如果找到,请打印出正确的消息。
  4. 否则,如果未找到该单词,请在 else 子句中打印错误消息。

我对 Ruby 有点陌生,所以我觉得语法可能缺少一些东西,但除此之外,我被难住了!任何帮助将不胜感激!以下是我尝试解析的代码和 Rakefile 的样子:

test.rake:

if Dir.exist?('spec/features')
path = 'spec/features/'
Dir.glob(path + '*.rb') {|file|
if File.readlines(file).grep(/capybara/).any?
print "The capybara dependency has been found!"
else
print "SOMETHING WENT WRONG"
end
}
end

耙文件

#!/usr/bin/env rake
# frozen_string_literal: true
require 'roll_out/rake_tasks'
require 'roll_out/security'
require 'roll_out/jira'
require 'REDACTED/philter/lint_results'
require 'roll_out/capybara'
load 'REDACTED/tasks/REDACTED.rake'

你的代码看起来几乎不错,除了每个都丢失了

我做了测试,它工作正常。

Dir.glob('spec/features/*.rb').each do |f|
puts 'haha' if File.readlines(f).any?{|line| line.include?('capybara')}
end

最新更新