【问题标题】:Where does Rails store data created by saving activerecord objects during tests?Rails 在哪里存储测试期间通过保存 activerecord 对象创建的数据?
【发布时间】:2010-10-01 01:36:24
【问题描述】:

Rails 在哪里存储测试期间通过保存 activerecord 对象创建的数据?

我以为我知道这个问题的答案:显然在 _test 数据库中。但看起来这不是真的

我使用这个系统来测试在 rspec 测试期间保存的 ActiveRecord 数据发生了什么:

$ rails -d mysql 测试

$ cd 测试

$ nano config/database.yml ...

...创建mysql数据库test_test、test_development、test_production

$ 脚本/生成 rspec

$ 脚本/生成 rspec_model foo

编辑 Foo 迁移:

类 CreateFoos

$ rake db:迁移

编辑规范/模型/foo_spec.rb:

需要 File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 描述 Foo do 之前(:每个)做 @valid_attributes = { :酒吧 => 12345 } 结尾 它“应该在给定有效属性的情况下创建一个新实例” foo = Foo.new(@valid_attributes) foo.save 放“睡觉……” 睡觉(20) 结尾 结尾

$ 耙子规格

当您看到“sleeping...”时,切换到另一个打开的终端,其中 mysql 会话连接到 test_test 数据库并执行以下操作:

mysql> 从 foos 中选择 *; 空集(0.00 秒)

为什么 mysql 会话在测试运行时不显示 test_test 数据库中的任何记录?

【问题讨论】:

    标签: ruby-on-rails ruby database rspec testing


    【解决方案1】:

    默认情况下,每次测试运行后,测试数据库中的项目都会被删除,这是设计的。这样做是为了确保您的每个测试都有自己的沙盒可供播放,不会导致与之前的测试发生任何交互。

    同样,这是设计使然。您不希望测试操作同一组数据(或依赖同步执行),因为无法保证执行顺序。

    但是,我相信如果你修改你的 test/test_helper.rb 文件这样说:

    self.use_transactional_fixtures = false
    

    而不是

    self.use_transactional_fixtures = true
    

    它将导致您的测试数据库中的数据持久化。

    另外:我的建议是专门为使用 Test::Unit 而设计的,而不是 RSpec。但是,我想您应该寻找类似的设置您的 spec_helper.rb。

    【讨论】:

    • 非常感谢 - 您的建议奏效了。在我清楚每次测试之前清除数据库。但是为什么 mysql 查询在测试运行时 显示数据库中没有数据呢? @Martin,从日志中我可以看到正在发生 ROLLBACK。这是否与为什么在测试运行时数据不可见有关?
    • 数据库事务是隔离的,所做的更改仅在事务连接上可见,直到提交。可以将其视为在数据库的不同副本中工作的每个事务。当它提交时,它会写入这些更改以供所有人查看。如果它回滚,它们就永远不会被看到。
    • 如果我的建议有效,您能否选择我的答案作为这个问题的“选择一个”?谢谢:)
    【解决方案2】:

    您可以通过以下方式观察添加到测试数据库的记录:

    tail -f log/test.log
    

    当测试运行时,您应该会看到交易飞逝。

    【讨论】:

    • 谢谢,这项技术有帮助。
    【解决方案3】:

    “但是为什么在测试运行时mysql查询没有显示数据库中的数据?”

    因为它在交易中。如果您关闭事务性固定装置,您的测试将运行得比以前慢得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多