5

我正在使用此设置开发自定义引擎。

我已经创建了引擎

rails plugin new MyEngine --full

然后我添加了rspec-railsguard-rspec作为开发依赖项

s.add_development_dependency "rspec-rails"
s.add_development_dependency "guard-rspec"

在我的 gemspec 文件中。

当我同时运行rspecrake spec(有或没有bundle exec)我的规格运行良好。但是,当我运行guard命令时,它第一次运行所有规范,然后它什么也不做。它不会检测到整个应用程序中的任何文件更改。

Guardfile 像往常一样生成guard init spec,这里是它的内容

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'rspec', :version => 2 do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec/" }

  # Rails example
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^lib/(.+)\.rb$})                           { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec/" }
  watch('spec/spec_helper.rb')                        { "spec/" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }
  # Capybara request specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
end

如果我在守卫运行的情况下保持一个外壳打开,而我从另一个外壳做touch app/my_model.rb任何事情都不会发生。Guardfile 中列出的所有其他文件(模式)都相同。

有没有办法调试这类问题?

更新 我创建了一个新项目(一个rails)并用这个安装了guard-shell gemGuardfile

guard 'shell' do
  watch(%r{(.*)}) {|m| `cat #{m[0]}` }
  watch(%r{(.*)}) {|m| raise m.to_s }
end

即使在这种情况下,如果我编辑任何文件,也不会发生任何事情。我开始认为问题可能出在其他地方,也许在rb-fsevents宝石中。我可以检查什么?

4

4 回答 4

10

rspec 的保护文件显然不太正确。它在看app/controllers,但不是app/models

你需要这样的规则:

watch(%r{^app/models/(.+)\.rb$}) {|m| "spec/models/#{m[1]}_spec.rb" }

将第二部分更改为保留模型规格的位置。自从我使用 rspec 已经有一段时间了,不记得 spec 目录布局。

编辑:

同样奇怪的是,lib watcher 被定义了两次?一次在顶部,一次在铁轨下。我想知道第二个定义是否是一个错误,并且意味着app/models.

于 2011-09-05T19:13:53.427 回答
1

好的,不知道出了什么问题,但问题出在 fseventd 中,它在某种程度上被冻结了。

不运行警卫已经解决了问题,所以问题不在于警卫本身

> guard
Please install rb-fsevent gem for Mac OSX FSEvents support
Using polling (Please help us to support your system better than that.)
Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile

此外,系统重新启动(不知道如何重新启动守护程序)已经“解锁”了 fseventd,现在它又可以工作了。也许是我的错,因为一个多月没有重新启动系统......

于 2011-09-05T19:59:10.053 回答
0

就我而言,Guard 最初是有效的。然后我创建了一个指向它监视的目录的符号链接。停了。

假设它监视“源/示例”。我创建了一个符号链接作为“source/link_me”->“source/example”。守卫也会保持沉默。

于 2014-04-08T15:46:59.087 回答
0

当前版本 1.2.2 中似乎也存在一个错误,它显示的症状与您在我的环境中描述的相同。更新到 1.2.3 有所帮助。

于 2012-07-03T09:41:08.737 回答