Rails test environment 下 rake db:migrate 的问题

bwlinux · 2014年06月17日 · 最后由 billy 回复于 2014年06月19日 · 2219 次阅读

为什么rake db:migrate RAILS_ENV=test要读取 development 的 db。现在有个变态的环境,unit test 的时候,因为 development 的 mysql2 在远程,但是 unit test 的时候,不让网络读取 development 的 db schema,有什么方法,不需要网络,可以把 test db 给建立起来,谢谢。

测试的数据库和开发数据库分开,测试的数据库应当在你自己的机器上面,不然别人执行 clean 动作,而你在跑测试的时候会出现冲突

谢谢。 我的问题是,运行 rake db:migrate RAILS_ENV=test,要从 development 的数据库得到 schema,而不是直接从 db/migrate/*.rb 直接生成 test 数据库的表?如果我的这个数据库在远程,没有网络的话,就没有办法单元测试。

不会是你的datebasy.ymltestdevelopment设置成同一数据库了吧 Ps:有没有觉得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。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号