RSpec::Core::RakeTask 和 Pathname/Dir.glob 中模式语法的区别
Difference between pattern syntax in RSpec::Core::RakeTask and Pathname/Dir.glob
如果我执行 .glob('**/spec')
那么递归部分保证将捕获当前目录中名为 spec
的目录。如果我使用 RSpec::Core::RakeTask
执行 task.pattern = '**/spec/**/*_spec.rb'
,则不会执行当前目录中 spec 内的测试。如果模式是 spec/**/*_spec.rb
,它们将是。 RSpec::Core::RakeTask
和 .glob
中的模式有什么区别,为什么?
根据文档,RSpec 的默认模式是 **/*_spec.rb
。为什么这与 RSpec::Core::RakeTask
的默认 spec/**{,/*/**}/*_spec.rb
不同(特别是 **
与 **{,/*/**}
;我认为这与第一个问题有关)?
如何在 RSpec::Core::RakeTask
中使用 glob 模式
RSpec::Core::RakeTask
只运行 rspec
可执行文件。设置任务的模式只是通过带有 --pattern
标志的模式。
RSpec 首先构造一个路径列表,在其中查找规范。如果命令行中没有给出文件或目录,则使用单个默认路径 'spec'。 RSpec 在每个路径中查找模式。 If the pattern begins with the path, RSpec just globs the pattern. If the pattern doesn't begin with the path, RSpec prepends the path to the pattern. 所以:
- 模式
**/spec/**/*_spec.rb
以通配符开头,因此 RSpec 在路径前面,而 spec/**/spec/**/*_spec.rb
不匹配任何内容。
- 模式
spec/**/*_spec.rb
以路径开头,因此 RSpec 只需使用它就可以了。
模式**/*_spec.rb
也可以; RSpec 会在前面加上 spec/
.
RSpec::Core::RakeTask
的默认模式
This part of the pattern **{,/*/**}
allows it to follow symlinks. 我不知道为什么 RSpec::Core::RakeTask
默认遵循符号链接而命令行 rspec
不遵循。
我相信 rake 任务的默认模式之所以有效,是因为 RSpec 认识到它以路径开头,而不是在路径前面。我认为如果它是 **{,/*/**}/*_spec.rb
它会更清晰并且可以在更多情况下工作。
如果我执行
.glob('**/spec')
那么递归部分保证将捕获当前目录中名为spec
的目录。如果我使用RSpec::Core::RakeTask
执行task.pattern = '**/spec/**/*_spec.rb'
,则不会执行当前目录中 spec 内的测试。如果模式是spec/**/*_spec.rb
,它们将是。RSpec::Core::RakeTask
和.glob
中的模式有什么区别,为什么?根据文档,RSpec 的默认模式是
**/*_spec.rb
。为什么这与RSpec::Core::RakeTask
的默认spec/**{,/*/**}/*_spec.rb
不同(特别是**
与**{,/*/**}
;我认为这与第一个问题有关)?
如何在 RSpec::Core::RakeTask
RSpec::Core::RakeTask
只运行 rspec
可执行文件。设置任务的模式只是通过带有 --pattern
标志的模式。
RSpec 首先构造一个路径列表,在其中查找规范。如果命令行中没有给出文件或目录,则使用单个默认路径 'spec'。 RSpec 在每个路径中查找模式。 If the pattern begins with the path, RSpec just globs the pattern. If the pattern doesn't begin with the path, RSpec prepends the path to the pattern. 所以:
- 模式
**/spec/**/*_spec.rb
以通配符开头,因此 RSpec 在路径前面,而 spec/**/spec/**/*_spec.rb
不匹配任何内容。 - 模式
spec/**/*_spec.rb
以路径开头,因此 RSpec 只需使用它就可以了。
模式**/*_spec.rb
也可以; RSpec 会在前面加上 spec/
.
RSpec::Core::RakeTask
的默认模式
This part of the pattern **{,/*/**}
allows it to follow symlinks. 我不知道为什么 RSpec::Core::RakeTask
默认遵循符号链接而命令行 rspec
不遵循。
我相信 rake 任务的默认模式之所以有效,是因为 RSpec 认识到它以路径开头,而不是在路径前面。我认为如果它是 **{,/*/**}/*_spec.rb
它会更清晰并且可以在更多情况下工作。