我正在尝试通过 沃特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条目。每次测试后,您的测试数据库将被清除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top