1

我对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 解释:

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

为什么它是一个有效的对?我显然错过了一些东西。

我对此特别感兴趣,因为在我看来登录不起作用,我想找出原因。

4

1 回答 1

2

没错,您的测试数据库是空的,因为每个测试示例都在一个事务中运行,并且在当前示例中创建的所有记录都通过回滚删除。这样做的目的是使每个示例与另一个示例隔离。

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

于 2012-04-06T07:43:05.713 回答