创建 Rake 任务

RSpec 带有一个 Rake 任务,其中包含许多有用的选项。

我们建议您将其包装在一个 `rescue` 子句中,以便您可以在 RSpec 不可用(例如在生产服务器上)的环境中使用 `Rakefile`。例如

  begin
    require 'rspec/core/rake_task'
    RSpec::Core::RakeTask.new(:spec)
  rescue LoadError
  end

规范通过时的默认选项(打印命令,退出状态为 0)

假设一个名为“Rakefile”的文件,内容为


begin
  require 'rspec/core/rake_task'

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

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

并且一个名为“spec/thing_spec.rb”的文件,内容为

RSpec.describe "something" do
  it "does something" do
    # pass
  end
end

当我运行 `rake` 时

那么输出应与以下内容匹配

(ruby(\d\.\d(.\d)?)?|rbx) -I\S+ [\/\S]+\/exe\/rspec

那么退出状态应为 0。

规范失败时的默认选项(退出状态为 1)

假设一个名为“Rakefile”的文件,内容为

begin
  require 'rspec/core/rake_task'

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

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

并且一个名为“spec/thing_spec.rb”的文件,内容为

RSpec.describe "something" do
  it "does something" do
    fail
  end
end

当我运行 `rake` 时

那么退出状态应为 1。

使用 `fail_on_error = false` 设置规范失败时的选项(退出状态为 0)

假设一个名为“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

并且一个名为“spec/thing_spec.rb”的文件,内容为

RSpec.describe "something" do
  it "does something" do
    fail
  end
end

当我运行 `rake` 时

那么退出状态应为 0。

使用 `rspec_opts` 将参数传递给 `rspec` 命令

假设一个名为“Rakefile”的文件,内容为

begin
  require 'rspec/core/rake_task'

  RSpec::Core::RakeTask.new(:spec) do |t|
    t.rspec_opts = "--tag fast"
  end
rescue LoadError
  # no rspec available
end

并且一个名为“spec/thing_spec.rb”的文件,内容为

RSpec.describe "something" do
  it "has a tag", :fast => true do
    # pass
  end

  it "does not have a tag" do
    fail
  end
end

当我运行 `rake spec` 时

那么退出状态应为 0

那么输出应与以下内容匹配

(ruby(\d\.\d(.\d)?)?|rbx) -I\S+ [\/\S]+\/exe\/rspec --pattern spec[\/\\*{,}]+_spec.rb --tag fast

通过 `rspec_opts` 将 Rake 任务参数传递给 `rspec` 命令

假设一个名为“Rakefile”的文件,内容为

begin
  require 'rspec/core/rake_task'

  RSpec::Core::RakeTask.new(:spec, :tag) do |t, task_args|
    t.rspec_opts = "--tag #{task_args[:tag]}"
  end
rescue LoadError
  # no rspec available
end

并且一个名为“spec/thing_spec.rb”的文件,内容为

RSpec.describe "something" do
  it "has a tag", :fast => true do
    # pass
  end

  it "does not have a tag" do
    fail
  end
end

当我运行 `rake spec[fast]` 时

那么退出状态应为 0

那么输出应与以下内容匹配

(ruby(\d\.\d(.\d)?)?|rbx) -I\S+ [\/\S]+\/exe\/rspec --pattern spec[\/\\*{,}]+_spec.rb --tag fast