我在测试中使用before(:all)
进行数据库初始化,这不会对我的测试用例造成任何问题……除了一个。我想在其他情况之前或之后运行此特殊情况,因为我想为其单独初始化数据库。有什么办法可以做到这一点?我想避免将before(:all)
替换为before(:each)
,因为我想保持测试快速。有可能吗?
答案 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设置每个上下文的顺序。出于这个问题开头的原因,这是一个愚蠢的差事。