0

在使用现有应用程序正在使用的遗留模式开发 Rails 应用程序时,如果表在整个模式中对外部 id 列具有 NOT NULL 约束,为了创建/保存模型以进行测试,这些关联需要存在模型,以及它们的关联等。因此,根据需要一次创建一个模型并使用它进行测试并不容易。

就测试而言,如果您使用 FactoryGirl 并且想要创建和保存模型实例以从控制器返回等,这似乎是一个问题,当涉及所有关联依赖项时。另一种选择是模拟,但模拟可能会花费更多时间,并且它不允许您轻松进行集成测试。另一种是使用固定装置,但这些固定装置既费时又脆弱。另一种方法是使用生产数据预先填充测试数据库,但这并不能解决测试中对工厂等/已知数据的需求,Rails 通常希望从测试环境的干净数据库开始。

当你有一个现有的复杂模式时,你会使用什么策略来开发模型、测试等,并且你正在将 Rails 应用程序连接到 - 不仅用于读取数据,还用于写入现有产品正在使用的现有模式应用?(即“海上重造”问题)

4

1 回答 1

1

当我们第一次开始解决这个问题时,我正在寻找可以从现有模式自动生成模型的东西。我找到了 Dr. Nic 的魔法模型生成器,但它只说明在 Rails 2.x 中有效。我运行了一个 Rails 2.x 环境(忘记它工作的特定版本),但它似乎没有多大帮助,所以我编写了一个脚本来生成我们的模型。然而,当我们开始开发时,我们有很多模型,所以我们开始尝试移除我们不需要的模型,然后需要注释掉与不再存在的模型的关联,但其中一些是必需的/NOT NULL 外键,所以我们现在不得不将它们移回并取消注释,比我们想象的要多。

在此过程中,我们确实编写并发现了一些有用的东西,并非所有我们都使用过,但它们可能对其他人有帮助:

至于测试数据设置,我开始写一个工具来自动化 FactoryGirl 工厂的开发,叫做Stepford并写了Modelist来帮助我们测试模型、解决循环依赖和识别模型依赖,所以我们不必包含所有自动生成的模型.

到目前为止,真的,我想出的唯一答案,也听到其他人的说法是,用不同的技术重建现有的应用程序,即使是零碎的,也是困难的、缓慢的和容易出错的。

于 2012-11-03T03:29:08.033 回答