在开发具有现有应用程序正在使用的旧模式的Rails应用程序时,如果表在整个模式中对外部id列具有NOT NULL约束,则为了创建/保存测试模型,模型需要存在对于那些协会及其协会等等,因此,只要在需要时一次创建一个模型并使用它进行测试就不容易。
就测试而言,如果您正在使用FactoryGirl并希望创建并保存模型实例以便在涉及所有关联依赖项时从控制器等返回,这似乎是一个问题。另一种选择是模拟,但是模拟可能需要更多时间,并且它不允许您轻松地进行集成测试。另一种是使用固定装置,但这些是耗时且易碎的。另一种方法是使用生产数据预先填充测试数据库,但这并不能解决测试中对工厂等等/已知数据的需求,而Rails通常希望从测试环境的干净DB开始。 / p>
当你有一个现有的复杂模式,你正在使用Rails应用程序时,你会使用什么策略开发模型,测试等,不只是为了读取数据,而且还要写入正在使用的现有模式现有的生产应用程序? (即“在海上重建船舶”问题)
答案 0 :(得分:1)
当我们第一次开始讨论这个问题时,我正在寻找可以从现有模式自动生成模型的东西。我找到了Nic博士的神奇模型生成器,但它只表示在Rails 2.x中有效。我运行了Rails 2.x环境(忘记它工作的特定版本),但它似乎没什么帮助,所以我写了一个脚本来生成我们的模型。然而,当我们开始开发时,我们有了大量的模型,所以我们开始尝试移出我们不需要的模型,然后需要将关联注释到不再存在的模型,但其中一些是必需的/ NOT NULL外键,所以我们现在必须将它们移回并取消注释,超出我们的预期。
我们确实编写并发现了一些在此过程中有用的内容,而不是我们使用过的所有内容,但它们可能对其他人有所帮助:
对于测试数据设置,我开始编写一个工具来自动开发名为Stepford的FactoryGirl工厂并编写Modelist来帮助我们测试模型,解决循环依赖关系并识别模型依赖关系,所以我们不必包括所有自动生成的模型。
到目前为止,我提出并且听到其他人说的唯一答案是,使用不同的技术重建现有的应用程序,即使是零碎的,也是困难,缓慢和容易出错的。