我正在使用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
进行清理。
如果您正确设置测试套件以擦除数据库,则不必担心清理“ let”。
使用let定义记忆的辅助方法。该值将被缓存跨同一示例中的多个调用,但不跨示例。
请注意,let是惰性求值的:直到第一个它定义的方法被调用的时间。
几乎在每种情况下,您都希望自动删除示例。那就是config.transactional_fixtures
所做的-在每个示例之后它都会回滚数据库,这样您就拥有了新的面貌,并且不会遇到测试订购问题。依靠每个示例/上下文在其自身之后进行显式清理的任何内容只是失败的秘诀。