在我的一个模型中,我使用一些元编程来动态定义一些方法。我想测试一下;因此,我需要一种紧凑的方法来断言我的模型具有具有特定名称的可读/可写属性。想法?
如果它有所作为,我将使用 shoulda 进行单元测试。
在我的一个模型中,我使用一些元编程来动态定义一些方法。我想测试一下;因此,我需要一种紧凑的方法来断言我的模型具有具有特定名称的可读/可写属性。想法?
如果它有所作为,我将使用 shoulda 进行单元测试。
您可能可以使用 should_have_instance_methods 或 should_have_class_methods shoulda 宏 - 我没有尝试过这个用例,它们可能依赖于您的对象具有超类 ActiveRecord::Base
那么respond_to呢?
o = some_dynamic_object()
assert(o.respond_to?(:method_x)) # getter
assert(o.respond_to?("method_x=".to_sym) # setter
有几种方法,取决于它的定义方式。如果您正常定义它(以某种方式def
或define_method
在eval
or中class_eval
),那么您可以使用defined? obj.prop
它来确保它响应读者(作家没有等价物)。您也可以obj.respond_to? :prop
用于读者和obj.respond_to? :prop=
作者。
如果您method_missing
用来模拟对属性的调用,那么obj.respond_to?
只有在您重新定义它时才会起作用(在这种情况下,您需要单独测试它),并且测试您的属性的唯一方法是尝试从中读取并写信给它,并断言它不会抛出任何异常。