Rspec 为什么模型在重新加载后在数据库中包含旧数据?

Rspec 为什么模型在重新加载后在数据库中包含旧数据?,rspec,rspec-rails,Rspec,Rspec Rails,之前的(:all)不应该只执行一次吗?在我的示例中,底部测试失败,因为db记录包含旧数据(name==“John”)。为什么会这样?我在上面的测试中将它改为“Irow” end此答案假设在rails\u helper.rb或spec\u helper.rb中有一行config.use\u transactional\u fixtures=true 您的测试所做的是在专用事务中运行每个测试,并在测试完成后回滚所述事务 您的第一个测试将@widget名称更改为Irow,成功通过并回滚对数据库的更改

之前的(:all)不应该只执行一次吗?在我的示例中,底部测试失败,因为db记录包含旧数据(name==“John”)。为什么会这样?我在上面的测试中将它改为“Irow”


end

此答案假设在
rails\u helper.rb
spec\u helper.rb
中有一行
config.use\u transactional\u fixtures=true

您的测试所做的是在专用事务中运行每个测试,并在测试完成后回滚所述事务

您的第一个测试将
@widget
名称更改为
Irow
,成功通过并回滚对数据库的更改

这会让你在测试后

@widget.name == "Irow"
但是

由于将名称更改为
Irow
的事务被回滚,因此数据库中的行再次具有
John

另一件值得一提的事情是,您可能以随机顺序运行测试(
config.order=:random
),因此,如果您没有在专用事务中运行每个测试,您的测试将闪烁

尽量使您的测试尽可能独立,仅当
确实有意义时(可能对于某些非常昂贵的操作),才在(:all)
之前使用

@widget.name == "Irow"
@widget.reload.name == "John"