2

我正在编写一个旨在从命令行运行的 Ruby 脚本。该脚本有一个相应的 RSpec 文件来验证其功能。文件夹结构为:

./main_script.rb
./spec/main_script_spec.rb

rspec spec在顶级目录中运行按预期工作。./spec/main_script_spec.rb显示来自文件的测试结果。我想避免每次更改主脚本文件或规范文件时手动运行它。我所有的搜索结果都会出现像guard这样的东西(据我所知)都是为Rails应用程序设计的。

如何设置 RSpec 以监视脚本或规范更改并使用非 Rails Ruby 代码自动运行?

4

4 回答 4

9

正如 David 所说,Guard 可用于监视各种文件并在这些文件被修改时执行操作。它不必与 Rails 应用程序一起使用。我过去使用guard. 这是我所做的:

将以下内容放入您的Gemfile:

source 'https://rubygems.org'

gem 'guard'
gem 'guard-shell'
gem 'rspec'
gem 'rb-fsevent', '~> 0.9'

然后运行:

$ bundle install

在你的主目录中创建一个 Guardfile:

$ guard init

在 中Guardfile,注释掉示例并添加:

guard :shell do
  watch(%r{^*\.rb}) { `bundle exec rspec spec/` }
end

这告诉守卫监视目录中任何 ruby​​ 文件的修改,并bundle exec rspec spec/在它们更改时执行命令(反引号用于在 shell 中执行命令)。

然后在当前目录中打开一个新的终端窗口并启动guard服务器以开始查看文件:

$ bundle exec guard

现在,当您修改目录中的 ruby​​ 文件时,您的 Rspec 测试套件应该会自动运行。

于 2013-07-31T15:43:49.700 回答
2

Guard 可用于普通的旧红宝石。我通常在守卫方面遇到麻烦,所以我喜欢使用watchr,另一种宝石。只需几行代码,您就可以告诉 watchr 监视文件的更改并在更改时运行命令。

有关使用纯红宝石的守卫示例,请参阅 shuhari gem。

watchr gem 更新:这个 gem 似乎有问题,可能是 ruby​​ >= 2.0 的版本。observr gem解决了这个问题,并在 ruby​​ 2.3 中按预期工作。

于 2013-07-31T15:30:54.933 回答
0

我使用了guardguard-rspec添加,效果很好,我不相信它是特定于Rails 的。其他 Ruby/RSpec 项目应该同样运行良好。

守卫文档建议使用Bundler 并“始终通过 Bundler 运行 Guard 以避免错误”。即,您通过 Gemfile 安装它并始终运行它bundle exec guard(或使用ruby​​gems -bundler来避免捆绑执行部分)。

于 2013-07-31T15:31:29.330 回答
0

我过去使用了 guard,但现在我使用了rspec 焦点功能和 watch 命令的组合。

这很简单,只需在要运行测试的块f之前添加一个。所以它会变成或阻塞。这与向块中添加标签相同。describeitfdescribefit:focus => true

然后我们可以使用焦点标签过滤规格:rspec -t focus

现在,为了使用焦点标签继续运行这些规范(每 0.5 秒),我们使用watch命令调用它:

watch -n 0.5 rspec -t focus

但是这样输出就不会显示颜色。所以,我们需要使用unbuffer

sudo apt-get install expect

稍加定制:

watch -n 0.5 --color 'unbuffer bundle exec rspec -t focus'

由于输入这些内容很烦人,因此我在~/.bash_aliases文件中创建了两个别名(您也可以使用.bashrc):

alias focus="watch -n 0.5 --color 'unbuffer bundle exec rspec -t focus'"
alias focuss="bundle exec rspec -t focus"

现在我可以键入focus以继续运行它,或者我键入单个焦点执行focuss

于 2021-06-13T18:09:58.870 回答