我需要的是在Factory.define块中的一种方法,以了解工厂是否已使用create或build进行调用,无论是显式还是仅使用默认策略。
我有一个工厂,必须手动调整代码的原始作者到目前为止可以管理正常创建barfs和正常构建的关联。我不想在构建案例中调整这些关联,但我必须在创建案例中。
我一直在寻找是否有类似于'current_strategy'的东西,但我还没有看到任何东西。我知道我可以使用after_create与after_build进行区分,但是原作者做了这样的事情,以便在不进行调整的情况下保存对象的行为会导致大量的不幸 - 在数据库中保存异常和垃圾。
我目前无权修复他所写的“模型”,现有的rspec测试使用差异化来随时做正确的事情。在每种情况下,先前的测试作者都选择从不使用create,这意味着设置大多数测试数据是一个神秘而漫长的过程。
任何帮助都会深深感激 - 我仍然在锻炼我的GoogleFu但是很想被短路......
哦,这是在Rails 2(/ cry)
谢谢!
答案 0 :(得分:1)
这听起来确实是一个非常奇怪的问题,但是既然你说你正在清理别人的代码,我会认为没有简单的方法。
我不会从工厂那里接近这个。工厂不应该关心,因为模型(不是工厂)在对象结构和关联方面应该是有效的守门人。
我会编写分别为create
和build
个对象的规范,并测试它们的关联以确保它们是正确的(根据您希望新行为最终是)。然后,通过重构模型来完成这些规范,以完成您实际需要它们执行的操作。这就是清理遗留代码并改变其行为的方法 - 编写将在新功能正确时通过的测试,并重构直到它们通过,每次测试/重构都进行渐进式更改。
当你的新规格通过时,你就可以了。如果前一作者提出了他们自己的规范验证以前的行为,那么你将不得不确定哪些测试目前是有效的(如果有的话)(其中很多可能是,因为它们代表了应用程序当前正在履行),并删除那些不是。