RSpec:before(:all)和before(:each)之间的深层差异

时间:2010-04-08 14:41:03

标签: rspec

好的,所以我遇到了一个非常奇怪的问题,直接与之前的块连接。我正在通过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之间的区别是什么?此外,如果我将用于创建用户的代码实际放在测试体中,它仍然不起作用(即用户不知何故没有添加到数据库或其他东西)。

1 个答案:

答案 0 :(得分:3)

您可能已启用事务处理夹具,因此您的Watir流程不会在事务中看到每个RSpec示例所包含的数据库更改。

尝试禁用事务功能并使用database cleaner之类的内容在每个示例之前获得一个干净的平板。