Factory_girl记录在哪里?
-
22-09-2019 - |
题
我正在尝试通过 沃特 和 RSPEC. 。因此,我在 /集成中创建了一个测试文件,并编写了一个测试,该测试通过 工厂女工.
问题是 - 我实际上无法与测试用户执行登录名。我写的测试看起来如下:
...
before(:each)
@user = Factory(:user)
@browser = FireWatir::Firefox.new
end
it "should login"
@browser.text_field(:id, "username").set(@user.username)
@browser.text_field(:id, "password").set(@user.password)
@browser.button(:id, "get_in").click
end
...
当我开始测试并在浏览器中看到“性能”时,它总是会启动 Username is not valid
错误。
我开始了调查,并做了一个小技巧。首先,我开始怀疑工厂是否真的在DB中创建了用户。因此,在立即致电工厂后,我放了一些 puts User.find
只是发现用户 是 实际上在DB中。好的,但是由于用户仍然无法记录,我决定看看他是否戴着我自己的眼睛在DB中。
我添加了一个 sleep
工厂电话后,去看看目前DB中的内容。我被粉碎了,看到用户实际上在那里缺少!怎么来的?不过,当我尝试在代码中输出用户时,实际上他正在某个地方获取。 那么,记录在运行时在哪里制作的记录? 是吗 test
或者 dev
D B?我不明白。
我已经检查了10次是否正在运行我的杂种 test
模式(这有关系吗?我认为确实如此,因为我试图调整集成测试)以及我的 database.yml
持有正确的连接特定数据。
我正在使用 身份证明, ,如果那能给任何线索(不,放 activate_authlogic
在这里不工作)。
解决方案 2
以某种方式,解决方案变得很奇怪 - 我将工厂放在(:all)块之前,所有的东西都可以正常工作。
其他提示
不要忘记,在运行规格时,RSPEC可能正在使用转移。 RSPEC将在交易和回滚末端包裹规格的执行。这意味着您将无法从该交易外部看到记录(即来自其他SQL连接)。
如果要确保实际上是由Factory Girl创建的用户记录,则可以做类似的事情:
before(:each)
@user = Factory(:user)
User.find_by_username(@user.username).should_not be_nil
@browser = FireWatir::Firefox.new
end
Factory Girl将在您的测试数据库中创建临时DB条目。每次测试后,您的测试数据库将被清除。