当前位置:  开发笔记 > 后端 > 正文

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

如何解决《Rails在哪里存储通过在测试期间保存activerecord对象而创建的数据?》经验,为你挑选了1个好方法。

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

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

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

$ rails -d mysql test

$ cd测试

$ nano config/database.yml ...

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

$ script/generate rspec

$ script/generate rspec_model foo

编辑Foo迁移:

class CreateFoos 

$ rake db:migrate

edit spec/models/foo_spec.rb:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe Foo do
  before(:each) do
    @valid_attributes = {
      :bar => 12345
    }
  end

  it "should create a new instance given valid attributes" do
    foo = Foo.new(@valid_attributes)
    foo.save
    puts "sleeping..."
    sleep(20)
  end
end

$ rake spec

当您看到"正在..."时,更改为另一个打开的终端,其中一个mysql会话连接到test_test数据库并执行:

mysql> select*from foos; 空集(0.00秒)

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



1> Derek P...:

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

再次,这是设计的.您不希望测试操作同一组数据(或依赖于同步执行),因为无法保证执行顺序.

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

self.use_transactional_fixtures = false

代替

self.use_transactional_fixtures = true

它将导致测试数据库中的数据持久存在.

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有