将RSpec作为Rake任务运行的好处是什么

时间:2018-07-09 06:04:12

标签: ruby rspec

将RSpec作为Rake任务运行有什么优势? 我的意思是,我可以只键入rspec来运行我的rspec测试用例,或者将以下几行添加到我的rakefile中,然后键入rake来运行它们,但是这样做有什么意义呢?

RSpec::Core::RakeTask.new(:spec) 

task :default  => :spec

如果这是一个愚蠢的问题,请原谅我,我现在正在学习ruby,我用google搜索了SO,但是找不到满意的答案。

2 个答案:

答案 0 :(得分:2)

之所以这样做,是出于与使用Rake运行任何其他任务相同的原因:Rake可以自动找出要按哪个顺序运行的任务,而不必一遍又一遍地手动弄清楚再次。

Rake是Ruby中面向依赖编程的库,框架和内部DSL 。这种工具的一个比较知名的名字是 Build Tool Build System (“ Rake”在“ Ruby make”上是很明显的玩法),但实际上,它不仅可以用于构建软件,还可以用于更多用途。

面向依赖的编程使您可以声明性的方式定义任务以及这些任务之间的依赖关系。然后,该工具确定要运行的任务以及满足这些依赖关系的顺序。根据工具的不同,它还可以找出可以并行运行的任务。

因此,通过Rake运行RSpec,您可以例如声明RSpec任务依赖于其他任务。想象一下,例如,您正在构建一个需要最新版本词典文件的翻译软件。然后,您可以声明您的RSpec任务依赖于字典文件,Rake会在运行测试之前确保字典存在。

相反,您可以声明某些任务取决于RSpec任务。例如,您可以声明构建gem并将其发布给公众的任务取决于RSpec任务,这样,只有在测试通过的情况下,您才可以发布gem。

答案 1 :(得分:1)

主要优点是以某种方式重新定义了命令,例如:

使用以下命令提供一个名为“ Rakefile”的文件:

begin
  require 'rspec/core/rake_task'

  RSpec::Core::RakeTask.new(:spec) do |t|
    t.fail_on_error = false
  end

  task :default => :spec
rescue LoadError
  # no rspec available
end

规格:

RSpec.describe "something" do
  it "does something" do
    fail #< - note!
  end
end

运行rake时,退出状态应为0(而不是由于fail而为零)

ref