【发布时间】:2009-07-16 13:28:14
【问题描述】:
我发现在 Rails 应用程序编程中非常方便的一个技巧是 class_eval 可用于动态创建方法。我现在开始进行测试,我想知道是否可以使用类似的想法来生成测试。
例如,我有一个before_filter 要求用户登录以执行控制器中的所有操作。我想编写测试以确保将before_filter 应用于所有操作。我不想单独写出每个测试,而是自动生成所有这些测试。
这种类型的测试是否可取,还是我应该坚持单独编写测试?如果是的话,怎么做呢?
编辑:这可能看起来像:
actions = {:index => :get,:show => :get,:edit => :get,:update => :put}
actions.each_pair do |action,type|
class_eval(%Q{def test_user_required_for_#{action}
set_active_user users(:one)
#{type} :#{action}
assert flash[:error]
assert_redirected_to :action => :index
end
})
end
既然人们已经验证这可能有用,我应该将这样的代码块放在哪里,以便它只执行一次来创建这些测试?
【问题讨论】:
-
尽量不要使用
class_eval的字符串形式。如果您必须使用class_eval(通常不需要),请使用块形式。更安全。
标签: ruby-on-rails unit-testing testing