覆盖before_save过滤器以在Rails中进行测试

时间:2009-05-28 21:04:34

标签: ruby-on-rails

我的模型类上有一个before_save过滤器,它将日期字段设置为未来日期,以保证数据的完整性。

除了单元测试之外,它的效果非常好。我想设置一个测试场景,其中包括将此日期字段设置为过去的日期。我无法使用ActiveRecord执行此操作,因为调用了before_save过滤器并将日期更新为将来的日期。是使用ActiveRecord::Base::connection.update执行原始SQL的最佳方法吗?

3 个答案:

答案 0 :(得分:2)

使用模拟对象可能是最好的。有关模拟对象的快速介绍,请阅读

http://erikonrails.wordpress.com/2008/05/07/how-to-use-mock-objects/

答案 1 :(得分:0)

可能会被视为一种黑客行为,但您可以随时在单元测试中重新打开模型类,并覆盖before_save过滤器的实现。

答案 2 :(得分:0)

如果你不允许这种情况发生,为什么你需要测试它何时发生?

我的意思是,如果你从未允许将过去的日期保存到该模型中,那么你应该永远不会那样,那么测试的是什么?

应该做的唯一测试是确保当你尝试保存过去的日期时它会正确处理它