通过练习Rails教程第10章的练习,该教程涉及测试微帖的分页,我无法弄清楚当我使用before(:all)
和after(:all)
进行测试时,为什么我的测试会中断。即使只是将其更改为before(:each)
,它也可以,因此它不是实例变量。 (虽然我也可以让它不使用实例,并构建user
提供的let
)
我只是想以正确的方式做到这一点。这样做一次(即:all
)似乎是正确的。我错过了什么?
我已经尝试了stop_and_open_page
- 当我使用:all
时它没有显示微博,只有其他方式(:each
)。但是,通过在控制台中检查我的实例变量或user
(当使用let
以binding.pry
的方式尝试)时,它始终具有微博,即使我指定了:all
。
我认为在使用:all
时没有加载关联是有意义的,但是我想不出一个原因,因为它在示例站点和未使用时的测试中起作用{ {1}}。
有什么想法吗?
P.S。我有一个附带问题 - 我在我的:all
模型中设置了关系User
,但是当我使用下面的实例变量方法进行这些测试时,我必须明确调用has_many :microposts, dependent: :destroy
在微型帖子上,否则它们在运行后保留在测试数据库中(即使用户被删除)。我是否遗漏了一些明显的东西,或者当用户是通过Factory Girl创建时级联破坏不起作用?
更新:感谢@Jesper,我发现了after(:all)没有删除相关微博的原因。代码已更新以反映该内容。
delete_all
答案 0 :(得分:0)
Capybara重置每个示例运行之间的会话,请参阅此答案:https://stackoverflow.com/a/9789326/648392
最有可能的是,您的模型已按预期设置,但测试失败,因为会话已重置。
换句话说,您可以在before(:all)
块中设置规范中所需的任何模型,但您必须将与会话相关的内容(例如valid_session
和visit root_path
)移动到before(:each)
阻止。