2010-04-20 4 views
0

내 모델 중 하나에서 일부 메타 프로그래밍을 사용하여 일부 메서드를 동적으로 정의하고 있습니다. 나는 이것을 시험하고 싶다. 따라서, 필자는 내 모델에 특정 이름의 읽기/쓰기 가능 특성이 있다고 주장하는 간결한 방법이 필요하다. 아이디어?모델에 읽고 쓸 수있는 특성이 있다고 주장하는 방법은 무엇입니까?

차이가 있다면 단위 테스트를 위해 shoulda를 사용하고 있습니다.

답변

3

당신이 should_have_instance_methods 또는 should_have_class_methods의 했어야 매크로를 사용할 수 있습니다 - 난이 사용하는 경우에 시도하지 않은 그들은 수퍼 액티브의 클래스 :: 자료 무엇 respond_to에 대한

을 가진 개체에 의존 수 있는가?

o = some_dynamic_object() 
assert(o.respond_to?(:method_x)) # getter 
assert(o.respond_to?("method_x=".to_sym) # setter 
+0

should_have_xxx 메서드 _do_는 ActiveRecord :: Base의 서브 클래 싱에 의존합니다. 그러나 대답의 일부는 매우 간결했습니다. 수락. –

+0

Shoulda (또는 test :: unit, idk)에는 편리한 메소드가 있습니다 : "assert_respond_to instance, sym" –

2

정의 방법에 따라 여러 가지 방법이 있습니다. 정상적으로 정의한 경우 (def 또는 define_methodeval 또는 class_eval 인 경우) defined? obj.prop을 사용하여 리더에 응답하는지 확인할 수 있습니다 (작성자와 동일한 의미는 없습니다). 독자에게는 obj.respond_to? :prop을, 작성자에게는 obj.respond_to? :prop=을 사용할 수도 있습니다.

method_missing을 사용하여 해당 속성에 대한 호출을 모방 한 경우 obj.respond_to?을 재정의하면 (이 경우 별도로 테스트해야 함) 속성을 테스트 할 수있는 유일한 방법은 그것을 읽고 그것에 쓰는 것을 시도하고, 예외를 던지지 않는다고 주장하는 것.

+0

+1 옵션. –

관련 문제