好的,所以我遇到了一个非常奇怪的问题,直接与之前的块连接。我正在通过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
之间的区别是什么?此外,如果我将用于创建用户的代码实际放在测试体中,它仍然不起作用(即用户不知何故没有添加到数据库或其他东西)。
答案 0 :(得分:3)
您可能已启用事务处理夹具,因此您的Watir流程不会在事务中看到每个RSpec示例所包含的数据库更改。
尝试禁用事务功能并使用database cleaner之类的内容在每个示例之前获得一个干净的平板。