代码之家  ›  专栏  ›  技术社区  ›  oldhomemovie

工厂女孩的记录在哪里?

  •  3
  • oldhomemovie  · 技术社区  · 14 年前

    我正试图通过 瓦蒂尔 小精灵 . 因此,我在/integration中创建了一个测试文件并编写了一个测试,它通过 女主角 .

    问题是我不能用我的测试用户执行登录。我写的测试如下:

    ...
    
    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 只为了发现用户 实际上是分贝。好吧,但用户还是无法登录,我决定亲眼看看他是否出现在数据库中。

    我添加了一个 sleep 刚接到工厂电话,就去看数据库里有什么。我被压碎了,看到用户真的不见了!怎么会?不过,当我试图在代码中输出一个用户时,他实际上是从某个地方获取的。 那么,工厂女孩在运行时制作的记录在哪里呢? 它是 test dev 数据库?我不明白。

    我已经检查了10次如果我要把我的杂种 测试 模式(重要吗?我想是的,因为我正在尝试一个集成测试 database.yml 保存正确的特定于连接的数据。

    我用的是 AutoLogic ,如果这能提供任何线索(不,把 activate_authlogic 在这里不起作用)。

    3 回复  |  直到 14 年前
        1
  •  4
  •   jbpros    14 年前

    不要忘记rspec在运行规范时可能正在使用transactions。rspec将在事务中包装规范的执行,并在最后回滚。这意味着您将无法从该事务外部(即从另一个sql连接)查看记录。

    如果要确保用户记录实际上是由Factory Girl创建的,可以执行以下操作:

    before(:each)
      @user = Factory(:user)
      User.find_by_username(@user.username).should_not be_nil
      @browser = FireWatir::Firefox.new
    end
    
        2
  •  2
  •   oldhomemovie    14 年前

    不知怎的,解决办法变得奇怪,我把工厂放在前面(:all)的街区,所有的东西都正常工作。

        3
  •  -1
  •   Nicholas C    14 年前

    工厂女孩将在您的测试数据库中创建临时数据库条目。每次测试后,您的测试数据库都将被清除。