加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails在测试期间存储通过保存activerecord对象

发布时间:2020-12-16 21:20:38 所属栏目:百科 来源:网络整理
导读:Rails在哪里存储通过在测试期间保存activerecord对象而创建的数据? 我以为我知道这个问题的答案:显然在_test数据库中.但看起来这不是真的! 我使用这个系统来测试在rspec测试期间保存的ActiveRecord数据发生了什么: $rails -d mysql test $cd测试 $nano c
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的>从foos中选择*;
空集(0.00秒)

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

解决方法

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

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

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

self.use_transactional_fixtures = false

代替

self.use_transactional_fixtures = true

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读