答案 0 :(得分:0)
您实际上并未测试数据库。您正在测试与应用程序交互的模型或可能触及数据库的其他“原始”代码。如果prod数据库中有魔法,请将其取出并放入固定装置或工厂。夹具和工厂将测试数据加载到测试实例中,例如:db_test。当测试通过或失败时,数据库将使用事务回滚,并且您的测试可以(并且应该)以原子方式运行。如果您正在尝试构建一个测试数据库的应用程序,那就是另一个故事。对于其他人,使用Rails提供的测试设计:fixtures或工厂以及config / database.yml中定义的“test”rails数据库。 YML文件交换出依赖注入功能。它只是变量的散列,你不需要任何pojo spring技巧来换掉环境。 :)当rails使用fixture或工厂运行测试时,它将仅加载database.yml中定义的测试环境。这也将与rspec,后卫和其他工具很好地集成。当我保存我的一个模型时,它会在我的测试数据库中创建一些数据,运行我的测试并通过点击源文件上的保存按钮来清理数据库。
集成测试仍应使用相同的机制。使这个过程变得烦人的唯一因素是遗留数据库,我在那里使用元编程实现了一些神奇的功能,以最大限度地减少麻烦。
看看factory_girl的工厂。和剧集railscast#275:http://railscasts.com/episodes/275-how-i-test
答案 1 :(得分:0)
我认为你只有两个选择:要么以某种方式复制数据库,要么将ORM分成一个瘦(尽可能薄)层并在测试中模拟出来。
此外,您可以在db/schema.rb
中准备好AR模式。