清理rspec中的shared_context变量

问题描述 投票:0回答:1

我正在使用RSpec.shared_context设置所有describe块将使用的变量。

这样的东西

RSpec.shared_context "common" do 
  let(:name) { #creates a database object }
   #more let statements
end

现在我像这样从描述块中调用它

describe "common test" do 
  include_context "common"
  #run few tests
end

现在运行describe块之后,我要清理它。如何回滚在共享上下文中创建的所有对象?

我曾尝试在after(:context)钩子中对其进行清理,但由于它是一个let语句,因此变量name仅在示例内部允许使用。

某种程度上我可以在运行describe块中的测试之后使用use_transactional_fixtures进行清理。

ruby-on-rails-4 rspec rspec3
1个回答
0
投票

如果您正确设置测试套件以擦除数据库,则不必担心清理“ let”。

使用let定义记忆的辅助方法。该值将被缓存跨同一示例中的多个调用,但不跨示例。

请注意,let是惰性求值的:直到第一个它定义的方法被调用的时间。

几乎在每种情况下,您都希望自动删除示例。那就是config.transactional_fixtures所做的-在每个示例之后它都会回滚数据库,这样您就拥有了新的面貌,并且不会遇到测试订购问题。依靠每个示例/上下文在其自身之后进行显式清理的任何内容只是失败的秘诀。

© www.soinside.com 2019 - 2024. All rights reserved.