before(:all)除了一个-可能吗?

时间:2019-10-03 08:53:02

标签: ruby-on-rails rspec

我在测试中使用before(:all)进行数据库初始化,这不会对我的测试用例造成任何问题……除了一个。我想在其他情况之前或之后运行此特殊情况,因为我想为其单独初始化数据库。有什么办法可以做到这一点?我想避免将before(:all)替换为before(:each),因为我想保持测试快速。有可能吗?

1 个答案:

答案 0 :(得分:0)

  

before(:all)除外-可以吗?

可能不是。 before(:all)在该范围内的所有示例之前运行,并且无法在其上方提升示例。

我认为一个更好的主意是解决该问题并创建不同的上下文:

RSpec.describe Thing do
  context "with :all" do
    before(:all) do
      # ...
    end
    # ...
  end
  context "without :all" do
    # ...
  end
end

如果需要共享设置步骤或变量,请使用shared contexts或外部作用域。如果要在不同的上下文中运行相同的示例,请使用shared examples

  

我想在其他人之前或之后运行此特殊情况,因为我想   分别为其初始化数据库。有什么方法可以做到这一点?

在运行rspec时,可以使用--order defined选项来顺序运行测试。但是,这会使您面临测试订购问题,从而掩盖了应用程序中的关键错误。快速测试如果没有发现错误,就毫无价值。

您还可以使用:order => :defined metadata设置每个上下文的顺序。出于这个问题开头的原因,这是一个愚蠢的差事。