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秒)
解决方法
默认情况下,在运行每个测试后,测试数据库中的项目将被删除.这样做是为了确保您的每个测试都有自己的沙箱,这样就不会导致与之前的测试发生任何交互.
再次,这是设计的.您不希望测试操作同一组数据(或依赖于同步执行),因为无法保证执行顺序.
但是,我相信如果你修改test / test_helper.rb文件来说这个:
self.use_transactional_fixtures = false
代替
self.use_transactional_fixtures = true
它将导致测试数据库中的数据持久存在.
另外:我的建议是专门设计用于Test :: Unit,而不是RSpec.但是,我想你应该寻找类似的spec_helper.rb设置.