为什么rake db:migrate RAILS_ENV=test要读取 development 的 db。现在有个变态的环境,unit test 的时候,因为 development 的 mysql2 在远程,但是 unit test 的时候,不让网络读取 development 的 db schema,有什么方法,不需要网络,可以把 test db 给建立起来,谢谢。
rake db:migrate RAILS_ENV=test
测试的数据库和开发数据库分开,测试的数据库应当在你自己的机器上面,不然别人执行 clean 动作,而你在跑测试的时候会出现冲突
谢谢。 我的问题是,运行 rake db:migrate RAILS_ENV=test,要从 development 的数据库得到 schema,而不是直接从 db/migrate/*.rb 直接生成 test 数据库的表?如果我的这个数据库在远程,没有网络的话,就没有办法单元测试。
不会是你的datebasy.yml把test和development设置成同一数据库了吧 Ps:有没有觉得rails要比django用着顺多了呢
datebasy.yml
test
development
rails
django
#3 楼 @dddd1919 我检查了,显然不是哦。 不过用过 python,但是没有用过 django。
#1 楼 @huacnlee 是我表述不清楚。 rake db:migrate RAILS_ENV=test建表的时候,是从 development 的数据库里边复制 table 的信息,而不是用 migrate/*.rb 来建表,这个让我很费解。
能给个理由 development db 为什么非要在远程吗?
我没有研究这部分的代码,但我对创建 test db 时要读取 development db 的内容表示质疑。应该是读取 schema.rb 就可以了。如果都要读取 development db 那 CI server 就没法跑了。
#7 楼 @billy 我仔细研究了,是我理解错了。 是因为 unit tests 的时候,一个 model 用到了 S3,这个需要网络。所以造成 rake db:migrate RAILS_ENV=test 的时候,需要 S3 的信息。
@bwlinux 好啊,问题被发现了:)测试的时候一切外部网络依赖都应该被 mock 掉,如果比较复杂的外部 API 还可以用 VCR gem。