我用的是 rails2 + rspec 1.3。
我想 spec 测试的时候,不要清空数据库。默认他会清空数据库所有数据。
google 了下,说设置
config.use_transactional_fixtures = false
会有用。
但我试了下,不起效果?有大神知道什么原因吗?
Rails2 已经是很久远的事情了。会不会跟你执行测试的命令有关,如果记得没错的话,rake test 会自动用 schema.rb 去完整的初始化 test 数据库,然后在跑测试,所以每次都重置一遍。
@lgn21st 是的。老项目是 rails2,想加测试代码的。 我使用 rake spec 命令跑的。就会每次清空数据库。 如果我改用 spec spec/xxx.rb 命令 直接跑就不会清空数据库。
@lgn21st 系统以前有个插件动态读取数据里面的值,生成常量。如果数据库没有值的话,这些常量将不会生成,rake 加载 rails 代码的时候,就会出编译的错误。
@lgn21st 你说的很对,是的老系统设计不是很好。mock 或者 stub 搞不定,因为他是在 load spec_helper.rb 文件的时候,就报错了。
@ywjno 错误的原因是这样的 load spec_helper.rb 头部有如下代码 ·require File.expand_path(File.join(File.dirname(FILE),'..','config','environment'))·
然后就会加载项目里面所有的 model, 这时候有个 model 里面会说有个常量没有定义的错误出现, 而这个常量的初始化也是 model 加载的时候动态读数据库生成的。 因为这时候数据库被清空了,所以常量也没生成出来。