关于设置工作 Guard-RSpec 示例项目的问题
Questions about setting up a working Guard-RSpec example project
我正在尝试使用 guard-rspec
.
建立一个有效的 ruby 项目
我混合了一个tutsplus tutorial with some new syntax as described in the RSpec videos and . The project can be found in the stack-overflow-question
branch on github的一般方法。
我也在尝试练习 Programming Ruby 1.9 中描述的命名空间。所以最终我想要 example.rb
在我的 lib/example/
目录中。
关于我的项目我有 4 个问题:
- 我需要在我的
Guardfile
中放入什么来观察我项目中特定目录的变化?我有几种不同的方式,可以在我的 Guardfile
中看到,评论如下:
# Watch Specific Directory Attempt X
在我的 Guardfile
中取消注释第 8 行和第 9 行(波纹管 Uncomment and set this to only include directories you want to watch
)和添加 "named group captures" 像 watch(%r{^lib/(?<path>.+)\.rb$}) { |m| "spec/lib/#{m[:path]}_spec.rb" }
有什么区别here
我需要将 --clear
选项放在哪里以使其持久化?我知道我可以 运行 它与我的 binstub 一样 bin/guard --clear
我试过把它放在我的 Guardfile
但是它没有用。
您在我的项目中看到任何明显的约定、语法或清晰度错误吗?我觉得我正在把这整件事拼凑在一起,我希望得到一些指导,以一种明智的方式将这件事拼凑在一起。
我会回答标题中的问题并涵盖"sub-questions"。
设置项目的最佳方式(截至目前)是使用 bundle exec guard --init rspec
。这应该给出合理的默认值以立即开始工作。它并不完美,但有很多工作计划改进,所以请在 GitHub 上提问(更有意义)。
Guard 必须保持向后兼容性,所以现在有一些 "non-intuitive" 东西,首先浏览所有文档(和 wiki)是一项很好的投资,可以快速了解什么是可用的,在哪里。在困惑或有疑问时询问也是一个好主意(最好每个问题一个问题)。
Guard 使用 DSL 来简化侦听器的设置。这有时有点 non-intuitive 和笨拙,但它确实有助于将操作组织成组,这有助于维护复杂的工作流程。 DSL 的命令,例如clearing 终端自动为:(clearing: on
)。 (这回答了问题 3)。
有各种各样的用途和场景,所以Guard努力让每个人都开心,每个平台也一样。 Guard 使用 Listen,它以递归方式监视目录(主要是由于 OSX 的限制)。这通常不是问题,但对于 OSX 上的大方向,这可能会非常非常慢。这就是为什么 Guard 让您 select 观看哪些顶级目录(如 'lib'、'app' 等)。看整个工程目录很方便,所以还是默认的。有关更多信息,请参见 Listen 项目。所以默认情况下所有目录(:directories
语句)都是"physically watched"(占用运行资源),虽然在Guard中你只配置你想要响应哪些变化(这是watch
语句做的).
选择的词有时有点误导。例如。 watch
在DSL中实际表示:"out of all the changes happening, select changes matching ..."。传递给 watch
的块给出了匹配的结果。该块应该 return 当前保护插件的文件列表到 运行。所以 "watch" 可能误导多于帮助。 "match" 可能是更好的选择,它可能会在未来取代 "watch"。
guard-rspec 项目 运行s RSpec 已更改文件。如果你 运行 开启调试选项,你可以看到确切的 RSpec 命令,例如bundle exec guard -d
。为了简化设置,Guard::RSpec 使用 DSL,如果您的项目遵循给定的设置,它应该工作 out-of-the-box。例如。 dsl.watch_spec_files_for(ruby.lib_files)
被定义为 here:所以如果您将所有经过测试的源文件放在 lib
中,它几乎已经可以完成您想要的操作了。对于其他文件夹,您可以添加自己的文件夹。例如。 Rails 项目通常在 app
目录中也有源代码,因此在默认的 Guard::RSpec 模板中有一个语句:dsl.watch_spec_files_for(rails.app_files)
其模式定义为:rails.app_files = %r{^app/(.+)\.rb$}
If您有一个未涵盖的典型案例,请在该项目中打开一个问题。 (涵盖问题 2)。
示例项目中的一切看起来都很好,建议主要基于品味或偏好。例如
- 我会使用 RSpec 的隐式 subject 而不是
let (:greeter) { Example::RSpecGreeter.new }
(但有些人可能会争辩说它不太明确且可读性较差)
- 如果您正在测试
Example::RSpecGreeter
,我建议您将 class 放在一个单独的文件中并改为包含它 (require 'example/rspec_greeter'
)
- 您可以添加 RubCop/Guard::RuboCop 来检测约定问题(涵盖第 4 个问题)
- 您可能想查看 Guard 自己的 Guardfile 用于自我测试的更多 "real-life" 设置,而不会出现文档混乱。
- 为了获得最佳结果,我认为最好复制整个现有项目并重命名要更改的部分。通常会有很多时间花在 fine-tuning 事情上,比如 Travis 的备用 RSpec 配置、特殊 gem 发布任务、某些变通办法和便利等
我正在尝试使用 guard-rspec
.
我混合了一个tutsplus tutorial with some new syntax as described in the RSpec videos and stack-overflow-question
branch on github的一般方法。
我也在尝试练习 Programming Ruby 1.9 中描述的命名空间。所以最终我想要 example.rb
在我的 lib/example/
目录中。
关于我的项目我有 4 个问题:
- 我需要在我的
Guardfile
中放入什么来观察我项目中特定目录的变化?我有几种不同的方式,可以在我的Guardfile
中看到,评论如下:
# Watch Specific Directory Attempt X
在我的
Guardfile
中取消注释第 8 行和第 9 行(波纹管Uncomment and set this to only include directories you want to watch
)和添加 "named group captures" 像watch(%r{^lib/(?<path>.+)\.rb$}) { |m| "spec/lib/#{m[:path]}_spec.rb" }
有什么区别here我需要将
--clear
选项放在哪里以使其持久化?我知道我可以 运行 它与我的 binstub 一样bin/guard --clear
我试过把它放在我的Guardfile
但是它没有用。您在我的项目中看到任何明显的约定、语法或清晰度错误吗?我觉得我正在把这整件事拼凑在一起,我希望得到一些指导,以一种明智的方式将这件事拼凑在一起。
我会回答标题中的问题并涵盖"sub-questions"。
设置项目的最佳方式(截至目前)是使用
bundle exec guard --init rspec
。这应该给出合理的默认值以立即开始工作。它并不完美,但有很多工作计划改进,所以请在 GitHub 上提问(更有意义)。Guard 必须保持向后兼容性,所以现在有一些 "non-intuitive" 东西,首先浏览所有文档(和 wiki)是一项很好的投资,可以快速了解什么是可用的,在哪里。在困惑或有疑问时询问也是一个好主意(最好每个问题一个问题)。
Guard 使用 DSL 来简化侦听器的设置。这有时有点 non-intuitive 和笨拙,但它确实有助于将操作组织成组,这有助于维护复杂的工作流程。 DSL 的命令,例如clearing 终端自动为:(
clearing: on
)。 (这回答了问题 3)。有各种各样的用途和场景,所以Guard努力让每个人都开心,每个平台也一样。 Guard 使用 Listen,它以递归方式监视目录(主要是由于 OSX 的限制)。这通常不是问题,但对于 OSX 上的大方向,这可能会非常非常慢。这就是为什么 Guard 让您 select 观看哪些顶级目录(如 'lib'、'app' 等)。看整个工程目录很方便,所以还是默认的。有关更多信息,请参见 Listen 项目。所以默认情况下所有目录(
:directories
语句)都是"physically watched"(占用运行资源),虽然在Guard中你只配置你想要响应哪些变化(这是watch
语句做的).选择的词有时有点误导。例如。
watch
在DSL中实际表示:"out of all the changes happening, select changes matching ..."。传递给watch
的块给出了匹配的结果。该块应该 return 当前保护插件的文件列表到 运行。所以 "watch" 可能误导多于帮助。 "match" 可能是更好的选择,它可能会在未来取代 "watch"。guard-rspec 项目 运行s RSpec 已更改文件。如果你 运行 开启调试选项,你可以看到确切的 RSpec 命令,例如
bundle exec guard -d
。为了简化设置,Guard::RSpec 使用 DSL,如果您的项目遵循给定的设置,它应该工作 out-of-the-box。例如。dsl.watch_spec_files_for(ruby.lib_files)
被定义为 here:所以如果您将所有经过测试的源文件放在lib
中,它几乎已经可以完成您想要的操作了。对于其他文件夹,您可以添加自己的文件夹。例如。 Rails 项目通常在app
目录中也有源代码,因此在默认的 Guard::RSpec 模板中有一个语句:dsl.watch_spec_files_for(rails.app_files)
其模式定义为:rails.app_files = %r{^app/(.+)\.rb$}
If您有一个未涵盖的典型案例,请在该项目中打开一个问题。 (涵盖问题 2)。
示例项目中的一切看起来都很好,建议主要基于品味或偏好。例如
- 我会使用 RSpec 的隐式 subject 而不是
let (:greeter) { Example::RSpecGreeter.new }
(但有些人可能会争辩说它不太明确且可读性较差) - 如果您正在测试
Example::RSpecGreeter
,我建议您将 class 放在一个单独的文件中并改为包含它 (require 'example/rspec_greeter'
) - 您可以添加 RubCop/Guard::RuboCop 来检测约定问题(涵盖第 4 个问题)
- 您可能想查看 Guard 自己的 Guardfile 用于自我测试的更多 "real-life" 设置,而不会出现文档混乱。
- 为了获得最佳结果,我认为最好复制整个现有项目并重命名要更改的部分。通常会有很多时间花在 fine-tuning 事情上,比如 Travis 的备用 RSpec 配置、特殊 gem 发布任务、某些变通办法和便利等