我对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解释:
这里的前(:每个)块通过访问登录页面登录 提交有效的电子邮件/密码对。
为什么它是有效的一对?我显然遗漏了一些东西。
我对此特别感兴趣,因为它让我觉得登录不起作用,我想找出原因。
答案 0 :(得分:2)
您说得对,您的测试数据库为空,因为每个测试示例都在transaction内运行,并且当前示例中创建的所有记录都将通过回滚删除。其目的是使每个示例与另一个示例隔离。
但是当当前示例运行时,您的数据库将填充FactoryGirl制作的记录(在您的案例中为一条记录)。无论在工厂生成什么电子邮件和密码,它都将在数据库和内存中保留(user
变量)。这就是为什么user.password
永远是正确的。