ruby-on-rails-4 - 清理 rspec 中的 shared_context 变量
问题描述
我RSpec.shared_context
用来设置所有描述块将使用的变量。
像这样的东西
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
现在运行描述块后,我想清理它。如何回滚在共享上下文中创建的所有对象?
我尝试在after(:context)
钩子中清理它,但由于它是一个 let 语句,因此该变量name
只允许在示例中使用。
在描述块中运行测试后,有什么方法可以use_transactional_fixtures
用来清理它。
解决方案
如果您只是正确设置测试套件以擦除数据库,则无需担心清理“let”。
使用 let 定义一个记忆化的辅助方法。该值将在同一示例中的多个调用中缓存,但不会跨示例缓存。
注意 let 是惰性求值的:直到它定义的方法第一次被调用时才会求值。
几乎在每种情况下,您都希望自动进行拆卸,例如。就是config.transactional_fixtures
这样 - 它在每个示例之后回滚数据库,以便您有一个新的石板并且不会遇到测试排序问题。依靠每个示例/上下文来显式清理自身只是失败的秘诀。
推荐阅读
- search - 哪些信息可以通过 API 控制器返回到 DotNetNuke ModuleSearchBase?
- python - Selenium 和 Python:将 WebElement 定义为属性的正确方法是什么
- flask - Axios GET 请求到服务器 - 不是本地主机
- javascript - 如何在 Vuejs Treeview 中添加复选框并链接到模型?
- html - 透明图像以防止复制
- javascript - 在继续程序之前等待代码运行
- php - 生成 1 到 999 之间的随机数
- python - python - 如何在kivy中更改弹出颜色
- ios - Firebase setValue 方法需要时间
- oracle - ORA-01861: 文字与 oracle 中 case 语句的格式字符串不匹配