用户sign_in集成测试如何/为什么实际上允许成功的假用户sign_in?

时间:2012-04-06 06:37:06

标签: ruby-on-rails-3 railstutorial.org

我对rails很新。我正在通过railstutorial(Rails 3.0)。有一次,我们为用户登录/注销流程编写了集成测试:

describe "success" do
  it "should sign a user in and out" do
    user = Factory(:user)
    visit signin_path
    fill_in :email,    :with => user.email
    fill_in :password, :with => user.password
    click_button
    controller.should be_signed_in
    click_link "Sign out"
    controller.should_not be_signed_in
  end
end

我的理解是测试使用db / test数据库。据我所知,这个数据库是空的(使用rails console test打开它)。我们如何使用Factory创建假用户,然后使用该用户的名称和电子邮件成功签名?

RailsTutorial解释:

  

这里的前(:每个)块通过访问登录页面登录   提交有效的电子邮件/密码对。

为什么它是有效的一对?我显然遗漏了一些东西。

我对此特别感兴趣,因为它让我觉得登录不起作用,我想找出原因。

1 个答案:

答案 0 :(得分:2)

您说得对,您的测试数据库为空,因为每个测试示例都在transaction内运行,并且当前示例中创建的所有记录都将通过回滚删除。其目的是使每个示例与另一个示例隔离。

但是当当前示例运行时,您的数据库将填充FactoryGirl制作的记录(在您的案例中为一条记录)。无论在工厂生成什么电子邮件和密码,它都将在数据库和内存中保留(user变量)。这就是为什么user.password永远是正确的。