好的,所以我遇到了一个非常奇怪的问题,与 before 块直接相关。我正在通过 Watir 和 RSpec 进行集成测试。对于检查用户是否可以执行登录的简单测试,我通过 factory_girl 在数据库中创建了一个“用户”记录。
所以我把下面的代码:
before(:each) do
@user = Factory(:user)
end
if "should perform a login" do
# do stuff
end
在
do stuff
我调用浏览器并查看用户如何尝试登录。不幸的是,不知何故他不能这样做——“用户名无效”。经过一番调查,我发现如果我将创建用户的代码放在
before(:all)
中块,万事如意 .怎么样? :all
有什么区别和 :each
在这种情况下?此外,如果我将用于创建用户的代码实际放在测试正文中,它仍然不起作用(即用户不知何故未添加到数据库或其他东西)。
最佳答案
您可能启用了事务性装置,因此您的 Watir 进程不会在每个 RSpec 示例所包含的事务中看到数据库更改。
尝试禁用事务功能并使用类似 database cleaner 的东西在每个例子之前得到一个干净的石板。
关于RSpec:before(:all) 和 before(:each) 之间的深入差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600821/