微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Rails在测试期间存储通过保存activerecord对象创建的数据?

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设置.

原文地址:https://www.jb51.cc/ruby/267573.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐